Computer networking system and method with Javascript execution for pre-fetching content from dynamically-generated URL

ABSTRACT

An apparatus, method, and non-transitory computer-readable medium comprising program code which when executed by an apparatus causes the apparatus to effect the method, for pre-fetching web content. Preferably, a proxy server performs the pre-fetching. Techniques such, for example, as executing Javascript in pre-fetched pages, modifying pre-fetched pages to address URL generation involving random numbers or dates, using cookie information or browser specifics when performing pre-fetching of pages, and injecting Javascript to measure response time may be performed, by way of example.

CROSS-REFERENCE TO RELATED APPLICATION

This application claims the benefit of U.S. Provisional Application No.61/417,626 filed Nov. 29, 2010.

FIELD OF THE INVENTION

The present invention relates to a computer networking system andmethod, and particularly to a computer networking system and method thatcan preferably be used with a network having a satellite link.

BACKGROUND OF THE INVENTION

Satellite communication systems have been used to provide network orInternet access, but satellite links can suffer from latency, andloading web pages that require multiple round trips can therefore beslow.

SUMMARY OF THE INVENTION

In one aspect, the present invention relates to a first apparatuscomprising: (a) means for receiving via a network connection, in a casewhere a first HTTP GET request for a first URL has been generated by asecond apparatus, first data from which the first URL can be obtained;(b) means for receiving, from a web server associated with the firstURL, second data from a HTTP response to a HTTP GET request for thefirst URL; (c) means for obtaining Javascript in accordance withJavascript in the second data; and (d) means for executing the obtainedJavascript, wherein a memory and processor are included in the firstapparatus. Optionally, one or more of the following may be satisfied:(1) the first apparatus may further comprise means for sending toanother apparatus, via a network connection, the obtained Javascript;(2) the another apparatus may be a third apparatus comprising means forreceiving the obtained Javascript and means for sending the obtainedJavascript to the second apparatus, and the second apparatus maycomprises means for receiving the obtained Javascript from the thirdapparatus and means for executing the obtained Javascript; (3) theanother apparatus may be a third apparatus comprising (a) means forgenerating a HTTP response to the first HTTP GET request in accordancewith the obtained Javascript, and (b) means for sending the HTTPresponse to the second apparatus, and the second apparatus may comprisemeans for receiving the HTTP response, means for obtaining the obtainedJavascript from the HTTP response, and means for executing the obtainedJavascript; (4) the another apparatus may be the second apparatus andcomprise means for receiving the obtained Javascript from the firstapparatus and means for executing the obtained Javascript; (5) theanother apparatus may be is the second apparatus and comprise (a) a HTTPweb browser that generated the first HTTP GET request and (b) a proxysoftware program that receives the obtained Javascript from the firstapparatus, generates a HTTP response to the first HTTP GET request inaccordance with the obtained Javascript, and sends the HTTP response tothe web browser, which executes the obtained Javascript; (6) theexecuting means may comprise a web browser that executes the obtainedJavascript; (7) the second data may be the HTTP response. The firstapparatus may further comprise means for generating, in accordance withthe first data, a HTTP GET request for the first URL, wherein the seconddata is data from a HTTP response to that HTTP GET request; (8) thesecond data may be data from a HTTP response to the first HTTP GETrequest; (9) the first apparatus may further comprise means for, inresponse to execution by the executing means of the obtained Javascriptproducing a request for a second URL, generating a second HTTP GETrequest for the second URL; means for receiving third data from a HTTPresponse to the second HTTP GET request; (10) the first apparatus mayfurther comprise means for sending the third data to another apparatus;(11) the another apparatus is a third apparatus, which comprises meansfor receiving the third data, means for generating a HTTP response inaccordance with the third data, and means for sending the HTTP responseto the second apparatus; (12) the another apparatus may be the secondapparatus, which comprises (a) a HTTP web browser and (b) means forreceiving the third data, for generating a HTTP response in accordancewith the third data, and for sending the HTTP response to the webbrowser; (13) the first apparatus may further comprise means for sendinga notification to the another apparatus that the first apparatus isgenerating the second HTTP get request, wherein the notification is sentprior to sending the third data to the another apparatus; (14) the firstapparatus may further comprise means for sending to the anotherapparatus, via a network connection, the obtained Javascript, whereinthe another apparatus comprises (a) means for receiving the notificationfrom the first apparatus and (b) means for awaiting receipt from thefirst apparatus of the third data without the another apparatusgenerating a request for the second URL; (15) the obtaining means maycomprise means for modifying Javascript in the second data to obtainJavascript which is different from Javascript in the second data; (16)the first apparatus may further comprise means for sending to anotherapparatus, via a network connection, the obtained Javascript, whereinthe another apparatus comprises means for executing the obtainedJavascript using a HTTP web browser; (17) the another apparatus is thesecond apparatus; (18) the obtaining means comprises: means fordetermining whether or not Javascript in the second data should bemodified; means for, when the determining means determines thatJavascript in the second data should not be modified, obtainingJavascript identical to Javascript in the second data; and means for,when the determining means determines that Javascript in the second datashould be modified, modifying Javascript in the second data to obtainJavascript which is different from the Javascript in the second data;(19) the first apparatus may further comprise means for sending via anetwork connection the obtained Javascript so that the second apparatusreceives the obtained Javascript, wherein the second apparatus comprisesmeans for executing the obtained Javascript so that both the firstapparatus and the second apparatus execute the obtained Javascript; (20)the first apparatus may further comprise means for, in response to HTMLin the second data including a reference to a URL, generating a secondHTTP GET request for that URL; and means for, in response to Javascriptin the second data that when executed produces a request for a URL,generating a third HTTP GET request for that URL; (21) the firstapparatus may further comprise means for receiving a response to thesecond HTTP GET request and for sending to another apparatus third datain accordance with the response; and means for receiving a response tothe third HTTP GET request and for sending to the another apparatusfourth data in accordance with the response; (22) the another apparatusmay be the second apparatus; (23) the another apparatus may be a thirdapparatus comprising (a) means for generating a HTTP response inaccordance with the third data and for sending the HTTP response to thesecond apparatus, and (b) means for generating a HTTP response inaccordance with the fourth data and for sending that HTTP response tothe second apparatus; (24) the first apparatus may further comprisemeans for sending the obtained Javascript via a network connection sothat the obtained Javascript is received by the second apparatus,wherein the second apparatus comprises means for executing the obtainedJavascript, and wherein, in the event that execution of the obtainedJavascript produces a request for a second URL, the first apparatusgenerates a HTTP GET request for the second URL and the second apparatusalso generates a HTTP GET request for the second URL, and the firstapparatus sends third data via a network connection to cause the secondapparatus to receive a HTTP response to the second apparatus's HTTP GETrequest for the second URL; (25) the first apparatus may send the thirddata to a third apparatus, which comprises (a) means for generating aHTTP response in accordance with the third data and (b) means forsending the HTTP response to the second apparatus, the HTTP responsebeing the HTTP response to the second apparatus's HTTP GET request forthe second URL; (26) the first apparatus may send the third data to thesecond apparatus, which comprises a web browser and a proxy program thatthe web browser is configured to use in the web browser's proxysettings, wherein the proxy program receives the third data andgenerates in accordance with the third data the HTTP response to thesecond apparatus's HTTP GET request for the second URL; (27) the secondapparatus comprises (a) a web browser, which generates the first HTTPGET request and which has proxy settings, and (b) a program selected bythe web browser's proxy settings, wherein the program receives the firstHTTP GET request, obtains the first URL from the first HTTP GET request,and in accordance with the first URL sends to the first apparatus thefirst data, wherein the first apparatus further comprises means forsending, to the second apparatus's program, data comprising the obtainedJavascript, wherein the program receives the data comprising theobtained Javascript and, in accordance with the data comprising theobtained Javascript, provides to the web browser a HTTP response to thefirst HTTP GET request, the HTTP response including the obtainedJavascript, wherein the web browser executes the obtained Javascript,wherein the first apparatus further comprises (a) means for, in theevent that the execution by the executing means of the obtainedJavascript produces a request for a second URL, generating a second HTTPGET request for the second URL, (b) means for receiving a HTTP responseto the second HTTP GET request, and (c) means for sending, to the firstapparatus's program, third data obtained in accordance with the HTTPresponse, and wherein when execution by the web browser of the obtainedJavascript results in generation of a HTTP GET request for the secondURL, the program generates in accordance with the third data andprovides to the web browser a HTTP response to the HTTP GET request forthe second URL, so that it is unnecessary for the program to send theHTTP GET request for the second URL to a web server corresponding to thesecond URL; (28) the second apparatus and a proxy apparatus areconnected via a network, and the proxy is connected to the firstapparatus via a high-latency network, wherein the second apparatuscomprises a web browser, which generates the first HTTP GET request,wherein the proxy apparatus receives the first HTTP GET request from thesecond apparatus, obtains the first URL from the first HTTP GET request,and in accordance with the first URL sends to the first apparatus thefirst data from which the first URL can be obtained, wherein the firstapparatus further comprises means for sending, to the proxy apparatus,data comprising the obtained Javascript, wherein the proxy apparatusreceives the data comprising the obtained Javascript and in accordancewith the data, generates and sends to the web browser of the secondapparatus a HTTP response to the first HTTP GET request, the HTTPresponse including the obtained Javascript, wherein the web browserexecutes the obtained Javascript, wherein the first apparatus furthercomprises (a) means for, in the event that the execution by theexecuting means produces a request for a second URL, generating a secondHTTP GET request for the second URL, (b) means for receiving a HTTPresponse to the second HTTP GET request, and (c) means for sending, tothe proxy apparatus, third data obtained in accordance with the HTTPresponse to the second HTTP GET request, and wherein when execution bythe web browser of the obtained Javascript results in generation of aHTTP GET request for the second URL, the proxy apparatus generates aHTTP response thereto in accordance with the third data, so that it isunnecessary for the proxy apparatus to send the HTTP GET request for thesecond URL to a web server corresponding to the second URL; (29) theproxy apparatus may be a non-transparent proxy such that the web browserhas proxy settings selecting the proxy apparatus; (30) the proxyapparatus is a transparent proxy such that the web browser does not haveproxy settings selecting the proxy apparatus; (31) the executing meanscomprises a HTTP web browser program; (32) the network connecting thesecond apparatus and the proxy apparatus is a low-latency network; (33)the high-latency network comprises a satellite connection.

In another aspect, the present invention relates to a device comprising:a processor; a memory storing a control program to be executed by theprocessor; and a hardware network interface, wherein the control programcomprises: (a) code for receiving, via the hardware network interface,first data relating to a first URL of a first HTTP GET request, thefirst HTTP GET request having been generated by a web browser of aclient apparatus; (b) code for receiving second data from a first HTTPresponse, the first HTTP response having been generated by an apparatuscorresponding to the first URL in response to a HTTP GET request for thefirst URL; (c) code for, if the second data includes Javascript,obtaining Javascript for execution by the control program, based onJavascript included in the second data; and (d) code for executing theobtained Javascript, wherein in response to the obtained Javascriptdynamically generating a URL when executed, the control programgenerates a second HTTP GET request for the dynamically-generated URL.Optionally, one or more of the following may be satisfied: (1) thecontrol program further comprises code for generating a HTTP GET requestfor the first URL; (2) the second data is the first HTTP response; (3)the control program further comprises code for, in response to receiptof the second data, sending third data in accordance with the seconddata for receipt by the client apparatus; (4) the control program isfurther configured to send the obtained Javascript for receipt by theclient apparatus so that both the client apparatus's web browser and thecontrol program execute the obtained Javascript; (5) the clientapparatus further comprises a proxy program selected by proxy settingsin the client apparatus's web browser, wherein the proxy program sendsto the control program the first data relating to the first URL of thefirst HTTP GET request, wherein the control program is furtherconfigured to send third data to the proxy program in accordance withthe second data, wherein in accordance with the third data, the proxyprogram generates and provides to the client apparatus's web browser aHTTP response to the first HTTP GET request; (6) the control program isfurther configured so that in response to receiving a HTTP response tothe second HTTP GET request, the control program sends to the proxyprogram fourth data in accordance with that HTTP response, and whereinthe proxy program, in response to the client apparatus's web browsergenerating a HTTP GET request for the dynamically-generated URL,generates a HTTP response in accordance with the fourth data andprovides the HTTP response to the client apparatus's web browser, as aHTTP response to that HTTP GET request; (7) the proxy settings include ahost setting, which is set to localhost; (8) a proxy apparatus on a samelocal area network as the client apparatus receives data from the firstHTTP GET request, obtains the first URL of the first HTTP GET requestbased on the received data, and sends to the control program the firstdata relating to the first URL of the first HTTP GET request, whereinthe control program is further configured to send third data to theproxy apparatus in accordance with the second data, in accordance withwhich third data the proxy apparatus generates and provides to theclient apparatus's web browser a HTTP response to the first HTTP GETrequest, wherein the control program is further configured so that inresponse to receiving a HTTP response to the second HTTP GET request,the control program sends to the proxy apparatus fourth data inaccordance with that HTTP response, and wherein the proxy apparatus, inresponse to the client apparatus's web browser generating a HTTP GETrequest for the dynamically-generated URL, generates a HTTP response inaccordance with the fourth data and provides the HTTP response to theclient apparatus's web browser, as a HTTP response to that HTTP GETrequest; (9) the proxy apparatus is selected by proxy settings in theclient apparatus's web browser; (10) the proxy apparatus is atransparent proxy apparatus not selected by proxy settings in the clientapparatus's web browser; (11) the client apparatus sends the first HTTPGET request using a source IP address corresponding to the clientapparatus and a destination IP address corresponding to the URL, thesource and destination IP addresses not being an IP address of thedevice; (12) the device has an IP address, corresponding to its hardwarenetwork interface, which is different from the source and destination IPaddresses; (13) the control program comprises a web browser and anotherprogram, and the another program controls the web browser to cause theweb browser to execute the obtained Javascript.

In yet another aspect, the present invention relates to anapparatus-implemented method comprising: receiving from a network, by afirst apparatus including a memory, a processor, and a hardware networkinterface, in a case where a first HTTP GET request for a first URL hasbeen generated by a second apparatus, first data from which the firstURL can be obtained; receiving by the first apparatus, from a thirdapparatus which is associated with the URL, second data from a HTTPresponse to a HTTP GET request for the first URL; obtaining Javascriptin accordance with Javascript in the second data; and executing, by thefirst apparatus, of the obtained Javascript. Optionally, one or more ofthe following may be satisfied: (1) the second data is the HTTPresponse; (2) the method further comprises generating, by the firstapparatus, of a second HTTP GET request for the first URL, wherein theHTTP response is a HTTP response to the second HTTP GET request.

In still a further aspect, the present invention relates to anon-transitory, tangible computer-readable storage medium in which isstored a computer program which when executed effects the foregoingmethod.

In yet another aspect, the present invention relates to a methodcomprising: determining, by a first apparatus including a memory, that asecond apparatus has made a request for a first URL, wherein the firstURL corresponds to a third apparatus; and when a web page correspondingto the first URL comprises code that when executed generates a dynamic,non-static second URL, prefetching, by the first apparatus, of contentin accordance with the second URL. Optionally, one or more of thefollowing may be satisfied: (1) the code comprises Javascript; (2) themethod further comprises a step of, when the web page comprises a staticURL, prefetching, by the first apparatus, of content in accordance withthe static URL; (3) the method further comprises generating, by thefirst apparatus, of a pre-fetch notification that is sent to a proxy forthe second apparatus, the pre-fetch notification informing the proxythat content for the second URL is to be prefetched by the firstapparatus; and (4) the proxy is selected from the group consisting of aproxy program executed by the second apparatus and a proxy apparatusseparate from the second apparatus, and wherein in response to the proxyhaving received the pre-fetch notification, the proxy prevents a HTTPrequest for the second URL generated by a web browser of the secondapparatus from being sent to a web server corresponding to the secondURL.

In a still further aspect, the present invention relates to anon-transitory, tangible computer-readable storage medium in which isstored a computer program which when executed effects the foregoingmethod.

In still another aspect, the present invention relates to a firstapparatus comprising: means for, in a case where a second apparatus hasgenerated a first HTTP GET request for a first URL, receiving, via anetwork connection, data from a HTTP response, the HTTP response havingbeen generated by a web server in response to a HTTP request for thefirst URL; and modifying means for obtaining, from Javascript in thedata, modified Javascript, wherein at least one of the followingconditions is satisfied: (a) said modifying means comprises means for,when the Javascript in the data, upon execution, uses a first randomnumber algorithm in an instance, obtaining, as the modified Javascript,Javascript that when executed instead uses in that instance a secondalgorithm different from the first random number algorithm; (b) saidmodifying means comprises means for, when the Javascript in the datauses a first chronological algorithm in an instance, obtaining, as themodified Javascript, Javascript that when executed instead uses in thatinstance a third algorithm different from the first chronologicalalgorithm; and (c) said modifying means comprises means for, when theJavascript in the data, upon execution, uses an algorithm to generate aURL in an instance, obtaining, as the modified Javascript, Javascriptthat when executed instead uses in that instance a different algorithmto generate a URL, wherein a memory and a processor are included in thefirst apparatus. Optionally, one or more of the following are satisfied:(1) the first apparatus further comprises means for sending from thefirst apparatus, via a network connection, data in accordance with themodified Javascript; (2) the sending means sends the data in accordancewith the modified Javascript via a network connection for receipt by thesecond apparatus; (3) the data in accordance with the modifiedJavascript comprises the modified Javascript; (4) the data from the HTTPresponse is the HTTP response; (5) the first apparatus further comprisesmeans for, in response to the generation by the second apparatus of thefirst HTTP GET request, generating a second HTTP GET request for thefirst URL; (6) the first apparatus further comprises means for executingthe modified Javascript; (7) condition (a) is satisfied; (8) theJavascript in the data includes a function call to a first random numberfunction that uses the first random number algorithm; (9) the secondalgorithm is selected such that a sequence of values output by thesecond algorithm when executed by a first one of two differentapparatuses matches in whole or in part with a sequence of values outputby the second algorithm when executed by a second one of the twodifferent apparatuses; (10) the second algorithm is selected such that asequence of values output by the second algorithm when executed by oneapparatus and a sequence of values output by the second algorithm whenexecuted by another apparatus are the same; (11) the first random numberfunction is the Javascript function Math.random; (12) the secondalgorithm is executed by invocation in the modified Javascript of anobject; (13) the second algorithm is executed by a function call in themodified Javascript to a function; (14) the first apparatus furthercomprises means for executing the modified Javascript; (15) the secondalgorithm is selected such that in a case where execution of themodified Javascript by the executing means uses the second algorithm toproduce a request for a second URL and execution of the modifiedJavascript by the second apparatus uses the second algorithm to producea request for a third URL, the same web page content is obtained inresponse to the second and third URL requests; (16) the second algorithmis selected so that the second URL and the third URL are the same; (17)the first apparatus further comprises means for sending from the firstapparatus, via a network connection, data in accordance with themodified Javascript, for receipt by the second apparatus; (18) the datain accordance with the modified Javascript comprises the modifiedJavascript; (19) the first apparatus further comprises means forexecuting the modified Javascript; (20) the first apparatus furthercomprises means for, in response to the generation by the secondapparatus of the first HTTP GET request, generating a second HTTP GETrequest for the first URL; (21) the second algorithm is selected suchthat if two different apparatuses repeatedly execute the secondalgorithm, each apparatus obtains a set of numerical values from thesecond algorithm that matches in whole or in part a set of numericalvalues from the second algorithm obtained by the other of the twodifferent apparatuses; (22) the sets are identical; (23) in the casethat the Javascript in the HTTP response uses the first random numberfunction to generate a URL, then the modified Javascript uses the secondalgorithm instead of the first random number function to generate a URL,and execution of the modified Javascript by two apparatuses includingthe second apparatus results in generation of the same URL by each ofthe two apparatuses; (24) the means for obtaining, as the modifiedJavascript, Javascript that when executed instead uses in that instancea second algorithm different from the first random number algorithmcomprises: (a) means for leaving unchanged in the Javascript in the dataa function call to a random number function; and (b) generatingJavascript not originally present in the HTTP response that redefinesthe random number function so that the unchanged function call executesthe generated Javascript, wherein the generated Javascript, whenexecuted, uses the second algorithm; (25) the random number function isthe Javascript Math.random function, and wherein the generatedJavascript assigns a new function to the Math.random variable so as toredefine the Math.random function; (26) the means for obtaining, as themodified Javascript, Javascript that when executed instead uses in thatinstance a second algorithm different from the first random numberalgorithm comprises: means for performing a search and replace functionthat replaces a reference in the Javascript in the data to the randomnumber function with a reference to a different function that whenexecuted uses the second algorithm; (27) the second algorithm is suchthat successive executions by a first apparatus results in a firstsequence of values and successive executions by a second apparatusresults in a second sequence of values, and at least the beginning valueof the first sequence is the same as the beginning value of the secondsequence; (28) at least the beginning values of the first sequence arethe same as the beginning values of the second sequence; (29) the secondalgorithm is configured to return an identical value for at least aplurality of executions of the second algorithm; (30) the secondalgorithm is configured to return an identical value for at least aplurality of executions of the second algorithm, and then to return adifferent value for an execution after the plurality of executions; (31)the means for obtaining, as the modified Javascript, Javascript thatwhen executed instead uses in that instance a second algorithm differentfrom the first random number algorithm comprises: means for finding inthe Javascript in the data a function call to a random number function;means for editing the Javascript in the data to add code which defines adifferent function at a position in the Javascript in the data so thatthe different function will already be defined at a position in theJavascript where the function call to the random number function isfound; and means for replacing the found random number function call inthe Javascript in the data with a call to the different function,wherein the different function uses the second algorithm; (32) condition(b) is satisfied; (33) the Javascript in the data uses the firstchronological algorithm in an instance by invoking a date object thatuses the first chronological algorithm, the date object returning a dateand a time, and wherein the modified Javascript uses a differentprogramming construct in place of the date object; (34) the differentprogramming construct is an object different from the date object; (35)the different programming construct is a function call to a function;(36) the third algorithm is such that when executed by the firstapparatus and when executed by the second apparatus, the third algorithmreturns a same chronological result in both cases irrespective of clocksin the first and second apparatuses being imperfectly synchronized; (37)the chronological result comprises date and time; (38) the modifiedJavascript uses the third algorithm to generate a URL such that when thefirst apparatus executes the modified Javascript to generate a secondURL and the second apparatus executes the modified Javascript togenerate a third URL, the same web page content is obtained in responseto requests for the second and third URLs; (39) the third algorithm isselected such that the second URL and the third URL are the same; (40)the third algorithm is such that when the first apparatus executes themodified Javascript that uses the third algorithm, and when anotherapparatus executes the modified Javascript that uses the thirdalgorithm, the third algorithm returns the same result in both caseseven when the first apparatus and the another apparatus are configuredfor different time zones; (41) the first apparatus further comprises (a)means for obtaining the second apparatus's timezone, (b) means fordetermining from the timezone a number of hours offset from the firstapparatus's time, and (c) means for determining a time value inaccordance with the offset; (42) the Javascript in the data includes aninvocation of the date object default constructor that uses the firstchronological algorithm, and wherein the means for, when the Javascriptin the data uses a first chronological algorithm in an instance,obtaining, as the modified Javascript, Javascript that when executedinstead uses in that instance a third algorithm different from the firstchronological algorithm comprises: means for replacing the invocation inthe Javascript of the date object's default constructor with a referenceto a programming construct that uses the third algorithm, wherein themodified Javascript, as compared to the original Javascript,additionally includes code which defines the programming construct thatuses the third algorithm; (43) the programming construct is an objectdifferent from the date object; (44) the programming construct is afunction call to a function; (45) the means for, when the Javascript inthe data uses the first chronological algorithm in an instance,obtaining, as the modified Javascript, Javascript that when executedinstead uses in that instance a third algorithm different from the firstchronological algorithm comprises: means for leaving unchanged aninvocation in the Javascript of the date object's default constructorthat uses the first chronological algorithm and for modifying theJavascript so as to redefine the date object so that references to thedate object default constructor when invoked cause execution of thethird algorithm instead of the first chronological algorithm; (46) thethird algorithm returns a result comprising a rounded date field; (47)the third algorithm returns a result comprising a rounded time field;(48) the third algorithm returns a result comprising, having beenrounded by using a predetermined interval, the minutes time field andall less precise fields; (49) the third algorithm returns a resultcomprising the minutes time field of the current time of day having beenrounded to an interval evenly divisible by a integer greater than one;(50) the integer is three, so that the minutes time field is always evendivisible by three; (51) the third algorithm returns a result comprisingat least one date or time field having been set to a predeterminedvalue; (52) the third algorithm sets a seconds time field to apredetermined value; (53) the third algorithm is such that even if thefirst apparatus and the second apparatus were to execute the differentobject at times that would result in a different seconds time fieldvalue if the first chronological algorithm were used, the thirdalgorithm returns the same seconds time field value to each of the firstapparatus and the second apparatus; (54) the third algorithm is used bythe modified Javascript to generate a URL in accordance with achronological measurement, and wherein the third algorithm is such thatthe same URL is generated by the first apparatus and the secondapparatus when executing the modified Javascript even when a clock ofthe first apparatus is not synchronized with a clock of the secondapparatus; (55) the third algorithm effects a setting procedure thatsets at least one of the seconds and/or milliseconds field of thedate/time value to a predetermined value; (56) the setting proceduresets both the seconds and milliseconds fields of the current time of dayto respective predetermined values; (57) in the case that the Javascriptin the data uses a date object to generate a URL, the date object usingthe first chronological algorithm, then the modified Javascript uses thethird algorithm to generate a URL and execution of the modifiedJavascript by two apparatuses including the second apparatus results ingeneration of the same URL by each apparatus; (58) wherein differencesbetween the Javascript in the data and the modified Javascript include(a) a reference in the Javascript in the data to a date object has beenreplaced, in the modified Javascript, by a reference to a function callto a date function, and (b) the modified Javascript, as compared to theoriginal Javascript, additionally includes code that defines the datefunction; (59) condition (c) is satisfied; (60) wherein the means for,when the Javascript in the data, upon execution, uses an algorithm togenerate a URL in an instance, obtaining, as the modified Javascript,Javascript that when executed instead uses in that instance a differentalgorithm to generate a URL comprises: one of (a) means for replacing areference in the Javascript to a date object used to generate a URL witha reference to a different date object used to generate a URL and (b)means for replacing a reference in the Javascript to a date object usedto generate a URL with a reference to a date function used to generate aURL; (61) wherein the means for, when the Javascript in the data, uponexecution, uses an algorithm to generate a URL in an instance,obtaining, as the modified Javascript, Javascript that when executedinstead uses in that instance a different algorithm to generate a URLcomprises: means for replacing a reference in the Javascript to a randomnumber function used to generate a URL with a reference to a differentrandom number function used to generate a URL; (62) the first apparatusfurther comprises means for executing the modified Javascript, whereinexecution of the modified Javascript by the executing means andexecution of the modified Javascript by the second apparatus results ingeneration of the same URL even in the case where execution of theoriginal Javascript by the executing means and execution of the originalJavascript by the second apparatus would not result in generation of thesame URL.

In a still further aspect, the present invention relates to a devicecomprising: a processor; a memory storing a control program to beexecuted by the processor; and a hardware network interface, wherein thecontrol program comprises: (a) code for receiving via a networkconnection a HTTP response to a first HTTP GET request for a first URL;at least one of (b1) code for, in the event that the HTTP responseincludes Javascript and the Javascript includes a call to a randomnumber function, obtaining, from the Javascript, modified Javascriptthat when executed causes a different function to be executed instead ofthe random number function, and (b2) at least one of (1) code for, inthe event that the HTTP response includes Javascript and the Javascriptincludes a reference to a date object, obtaining, from the Javascript,modified Javascript that when executed causes a different object to beexecuted instead of the date object and (2) code for, in the event thatthe HTTP response includes Javascript and the Javascript includes areference to a date object, obtaining, from the Javascript, modifiedJavascript that when executed causes a function different from the dateobject to be executed instead of the date object; (c) code for executingthe modified Javascript; (d) code for sending the modified Javascriptvia a network connection for receipt by an apparatus that issued a HTTPGET request for the URL, which apparatus receives the modifiedJavascript and executes the modified Javascript.

In a still further aspect, the present invention relates to anapparatus-implemented method comprising: receiving from a web server, bya first apparatus comprising a memory, data from a HTTP response to aHTTP GET request for a URL; at least one of (a) in the event that thedata includes Javascript and the Javascript includes a call to a randomnumber function, obtaining by the first apparatus, based on theJavascript, modified Javascript that when executed causes a differentfunction to be executed instead of the random number function, and (b)in the event that the data includes Javascript and the Javascriptincludes an invocation of the date object default constructor, obtainingby the first apparatus, based on the Javascript, modified Javascriptthat when executed causes execution of code other than the invocation ofthe date object default constructor. Optionally, one or more of thefollowing is satisfied: (1) the method comprises (a); (2) the methodfurther comprises generating, by the first apparatus in response to asecond apparatus generating a HTTP GET request for the URL, of a HTTPGET request for the URL; (3) the method further comprises executing, bya second apparatus which had generated a HTTP GET request for the URL,of the modified Javascript.

In yet another aspect, the present invention relates to anon-transitory, tangible computer-readable memory medium in which isstored instructions that when executed by a processor effect theforegoing method.

Optionally, one or more of the following is satisfied: (1) the methodcomprises (b); (2) the method further comprises generating, by the firstapparatus in response to a second apparatus generating a HTTP GETrequest for the URL, of a HTTP GET request for the URL; (3) the methodfurther comprises executing, by a second apparatus which had generated aHTTP GET request for the URL, of the modified Javascript. In anotheraspect, the present invention relates to a non-transitory, tangiblecomputer-readable memory medium in which is stored instructions thatwhen executed by a processor effect the foregoing method.

In a still further aspect, the present invention relates to a methodcomprising: at least one of (a) modifying, by a first apparatuscomprising a memory and a processor, of Javascript included in HTML webpage data received via a network connection from a web server, such thatin a case that the Javascript uses a random number function to generatea URL, the modified Javascript uses different programming instead of therandom number function to generate a URL, and (b) modifying, by a firstapparatus comprising a memory and a processor, of Javascript included inHTML web page data received via a network connection from a web server,such that in a case that the Javascript uses a date object to generate aURL, the modified Javascript uses programming different from the dateobject to generate a URL (or the modified Javascript generates a URL byusing programming different from and in place of that used by the dateobject); sending the modified Javascript from the first apparatus forreceipt by a second apparatus via a network connection; and executing byboth the first apparatus and the second apparatus of the modifiedJavascript so that when the first apparatus executes the modifiedJavascript to request a URL generated using the different programmingand receives a first image in response to the request, and the secondapparatus executes the modified Javascript to request a URL generatedusing the different programming and receives a second image in responseto the request, the first image and the second image are the same.Optionally, one or more of the following is satisfied: (1) wherein themethod comprises (a); (2) wherein the first image and the second imageare advertisements; (3) wherein the URL generated by the first apparatususing the different programming and the URL generated by the secondapparatus using the different programming are the same, even in a casewhere URL generation by the first apparatus using the unmodifiedJavascript and URL generation by the second apparatus using theunmodified Javascript would have resulted in different URLs; (4) themethod comprises (b); (5) the first image and the second image areadvertisements; (6) the URL generated by the first apparatus using thedifferent programming and the URL generated by the second apparatususing the different programming are the same, even in a case where URLgeneration by the first apparatus using the unmodified Javascript andURL generation by the second apparatus using the unmodified Javascriptwould have resulted in different URLs.

In yet another, additional aspect, the present invention relates to amethod comprising: receiving an HTTP response from a first apparatus; atleast one of (a) editing, by a second apparatus comprising a memory, ofJavascript in the HTTP response to change an algorithm used for randomnumber-based URL generation, and (b) editing, by a second apparatuscomprising a memory, of Javascript in the HTTP response that performschronologically-based URL generation to change an algorithm used for thechronologically-based URL generation; and sending, by the secondapparatus, of the edited Javascript to a third apparatus. Optionally,one or more of the following is satisfied: (1) wherein the methodcomprises (b); (2) wherein the chronologically-based URL generation usesa date when generating a URL; (3) the chronologically-based URLgeneration uses a time when generating a URL; (4) thechronologically-based URL generation generates a URL using at least adate and a time; (5) the method further comprises executing by thesecond apparatus and by the third apparatus of the edited Javascript;(6) a tangible memory medium stores program instructions that whenexecuted cause a computer to effect the method.

In yet a still further aspect, the present invention relates to a firstapparatus comprising: means for, in a case where a second apparatus hasgenerated a first HTTP GET request for a first URL, receiving from a webserver data from a HTTP response to a HTTP request for the first URL;means for, in the event that the data from the HTTP response includesJavascript and the Javascript includes a reference to a date object,obtaining, based on the Javascript, modified Javascript that whenexecuted causes a different construct to be executed instead of the dateobject, wherein a memory and a processor are included in the firstapparatus. Optionally, one or more of the following conditions issatisfied: (1) the first apparatus further comprises means for sendingthe modified Javascript for receipt by the second apparatus; (2) thefirst apparatus further comprises means for sending data in accordancewith the modified Javascript for receipt by the second apparatus; (3)wherein the data from the HTTP response is the HTTP response; (4) thefirst apparatus further comprises means for, in response to thegeneration by the second apparatus of the first HTTP GET request,generating a second HTTP GET request for the first URL; (5) the firstapparatus further comprises means for executing the modified Javascript,wherein the different construct is a construct that returns a differentdate/time combination from the date object.

In an additional aspect, the present invention relates to a firstapparatus comprising: means for receiving via a network connection, in acase where a first HTTP GET request for a first URL has been generatedby a web browser of a second apparatus, first data from which the firstURL can be obtained; means for receiving, from a web server associatedwith the first URL, a HTTP response to a HTTP GET request for the firstURL; means for obtaining Javascript in accordance with Javascript in theHTTP response such that in the event that Javascript in the HTTPresponse makes use of web browser-specific information to generate aURL, the execution of the obtained Javascript uses web browser-specificinformation relating to the web browser of the second apparatus whengenerating the URL, and means for executing the obtained Javascript,wherein a memory and processor are included in the first apparatus.Optionally, one or more of the following conditions may be satisfied:(1) the first apparatus further comprises means for receiving via anetwork connection the web browser-specific information relating to theweb browser of the second apparatus, wherein the web browser-specificinformation relates to a characteristic of the web browser; (2) whereinthe web browser-specific information comprises web browser windowgeometry; (3) the first apparatus further comprises means forgenerating, in accordance with the first data, a second HTTP GET requestfor the first URL; (4) the first apparatus further comprises means forgenerating Javascript which, when processed by the web browser of thesecond apparatus, causes the second apparatus to send the webbrowser-specific information to another apparatus; (5) wherein theJavascript that causes the second apparatus to send the webbrowser-specific information to another apparatus comprises Javascriptthat places the web browser-specific information in a URL of a HTTP GETrequest; (6) wherein the Javascript that causes the second apparatus tosend the web browser-specific information to another apparatus comprisesJavascript that places the web browser-specific information in data of aPUT request; (7) wherein the Javascript that causes the second apparatusto send the web browser-specific information to another apparatuscomprises Javascript that places the web browser-specific information indata of a POST request; (8) wherein the Javascript that causes thesecond apparatus to send the web browser-specific information to anotherapparatus comprises Javascript that places the web browser-specificinformation in a cookie sent via a HTTP transaction; (9) wherein theJavascript that causes the second apparatus to send the webbrowser-specific information to another apparatus comprises (a)Javascript that causes the web browser of the second apparatus to obtainthe web browser-specific information from the web browser's JavascriptDocument Object Model (DOM) and (b) Javascript that causes the webbrowser of the second apparatus to send the obtained webbrowser-specific information for receipt by the first apparatus; (10)wherein the web browser-specific information includes a window width;(11) wherein the web browser-specific information includes a windowheight; (12) wherein the web browser-specific information includes anavailable width; (13) wherein the web browser-specific informationincludes an available height; (14) wherein the web browser-specificinformation includes a color depth; (15) wherein the webbrowser-specific information includes a pixel depth; (16) wherein theweb browser-specific information includes a timezone; (17) wherein theweb browser-specific information includes a Java-enabled query result;(18) wherein the web browser-specific information includes browserhistory information; (19) wherein the web browser-specific informationincludes windows geometry information, and wherein the second apparatusexecutes a HTTP GET request for a URL, which URL depends upon the windowgeometry information, to send the windows geometry information forreceipt by the first apparatus; (20) the web browser-specificinformation includes a browser identity; (21) wherein the webbrowser-specific information includes a browser version; (22) whereinthe web browser-specific information includes browser compatibilityinformation; (23) wherein the web browser-specific information includesinformation on installed browser plugins; (24) wherein the informationon installed browser plugins includes information on whether Adobe Flashis an installed browser plugin; (25) wherein a client proxy insertsJavascript into a HTTP response such that when the web browser of thesecond apparatus executes the Javascript, the web browser generates aHTTP request used to send the web browser-specific information to thefirst apparatus (the client proxy may be part of the second apparatus orin a separate apparatus, for example); (26) wherein a client proxyinserts Javascript into a HTTP response such that when the web browserof the second apparatus executes the Javascript, the Javascript causesthe web browser to generates a HTTP request comprising the web browserspecific information, and wherein the client proxy receives the HTTPrequest and sends the web browser specific information to the firstapparatus.

In a still further aspect, the present invention relates to a firstapparatus comprising: means for receiving via a network connection webbrowser-specific information regarding a characteristic of a web browserof a second apparatus; and means for executing Javascript that makes useof web browser-specific information, using the received webbrowser-specific information relating to the web browser of the secondapparatus instead of web browser-specific information relating to a webbrowser of the first apparatus, wherein a memory is included in thefirst apparatus. Optionally, one or more of the following may besatisfied: (1) wherein the web browser-specific information includesbrowser window geometry information, and wherein the second apparatusexecutes a HTTP GET request for a URL, which URL depends upon thebrowser window geometry information, to send the browser window geometryinformation for receipt by the receiving means; (2) wherein the webbrowser-specific information comprises one or more of window sizeinformation, color depth, and timezone information.

In yet another aspect, the present invention relates to a firstapparatus comprising: a processor; a memory storing a control program tobe executed by the processor; and a hardware network interface, whereinthe control program comprises code by which the control program isconfigured to: (a) receive, via a network connection, webbrowser-specific information of a second apparatus; and (b) executeJavascript such that in a case that the Javascript includes Javascriptthat generates a URL which relies upon web browser-specific information,the received web browser-specific information is selected to be used togenerate the URL which relies upon web browser-specific information.

Still further, in an additional aspect, the present invention relates toan apparatus-implemented method comprising: receiving, by a firstapparatus comprising a memory and a processor, via a network connection,in a case where a first HTTP GET request for a URL has been generated bya web browser of a second apparatus, data from which the URL can beobtained; receiving via a network connection web browser-specificinformation regarding a characteristic of the web browser of the secondapparatus; receiving, from a web server associated with the URL, a HTTPresponse to a HTTP GET request for the URL; obtaining Javascript inaccordance with Javascript in the HTTP response to the second HTTP GETrequest, wherein in the event that the Javascript in the HTTP responseincludes Javascript that makes use of web browser-specific information,the obtained Javascript when executed uses the received webbrowser-specific information relating to the web browser of the anotherapparatus; and executing the obtained Javascript.

Also, the present invention relates to a tangible memory medium storinga program that when executed by a system including a hardware componenteffects the foregoing method.

In yet a further aspect, the present invention relates to a methodcomprising: receiving, by a first apparatus comprising a processor and amemory, via a network connection, of web browser-specific informationrelating to a web browser of a second apparatus, the informationdescribing a characteristic of the web browser; and executing Javascriptthat makes use of web browser-specific information, using the receivedweb browser-specific information relating to the web browser of thesecond apparatus instead of web browser-specific information relating toa web browser of the first apparatus. Optionally, one or more of thefollowing may be satisfied: (1) wherein the web browser-specificinformation includes browser geometry information, and wherein saidreceiving step receives the browser geometry information when the secondapparatus executes a HTTP GET request for a URL, the URL includinginformation from which the browser geometry information can be obtained;(2) a non-transitory storage medium comprises a program that effects theforegoing method.

Still further, the present invention also relates to a methodcomprising: receiving, by a first apparatus comprising a processor and amemory, of window size information of a web browser of a secondapparatus, which window size information the web browser of the secondapparatus uses to request an image; and using, by the first apparatus,the received window size information to pre-fetch that same image forthe second apparatus.

And additionally, the present invention relates to anapparatus-implemented method comprising: receiving by a first apparatuscomprising a processor, via a network connection, of Javascript from aHTTP response; injecting, by the first apparatus into the Javascript, ofcode that, when executed by a web browser of a second apparatus, causeswindow geometry information of the web browser to be sent via a networkconnection to the first apparatus.

Still further, the present invention relates to a first apparatuscomprising: means for receiving via a network connection, in a casewhere a first HTTP GET request for a first URL has been generated by asecond apparatus, first data from which the first URL can be obtained;means for receiving, from a web server associated with the first URL,second data from a HTTP response to a HTTP GET request for the firstURL; cookie information receiving means for receiving via a networkconnection cookie information corresponding to a cookie of a first webbrowser of the second apparatus, wherein the cookie information isreceived separately from cookie fields of an HTTP header; and means forstoring the cookie information, wherein a memory and processor areincluded in the first apparatus. Optionally, one or more of thefollowing may be satisfied: (1) wherein in response to the first webbrowser of the second apparatus generating a HTTP GET request that usesa cookie, a client proxy obtains cookie information in accordance withthe cookie and sends the cookie information to said cookie informationreceiving means; (2) wherein the client proxy is a program stored in amemory of the second apparatus; (3) wherein the client proxy is atransparent proxy apparatus separate from the first apparatus and thesecond apparatus; (4) wherein in response to a HTTP response sent to thefirst web browser of the second apparatus including a set cookierequest, a client proxy obtains cookie information in accordance withthe set cookie request and sends the cookie information to said cookieinformation receiving means; (5) wherein the client proxy is a programstored in a memory of the second apparatus; (6) wherein the client proxyis a transparent proxy apparatus separate from the first apparatus andthe second apparatus; (7) the first apparatus further comprises: asecond web browser configured to generate a second HTTP GET request fora second URL; means for determining, based on the stored cookieinformation, if the first web browser were to have generated a requestfor the second URL, whether such request would use a cookie; and meansfor, if said determining means determines that a request for the secondURL would use a cookie if it had been generated by the first webbrowser, attaching a cookie from the stored cookie information to thesecond HTTP GET request to form a modified second HTTP GET request; (8)the first apparatus further comprises means for receiving, from a webserver associated with the second URL, third data from a HTTP responseto the modified second HTTP GET request for the second URL; and meansfor forming a second HTTP response which includes the third data and thecookie from the stored cookie information, wherein said second webbrowser receives the second HTTP response as a response to the secondHTTP GET request. Optionally, one or more of the following may besatisfied: (1) wherein the first web browser also receives the thirddata; (2) the first apparatus further comprises means for updatingcookie information stored in said second web browser in accordance withthe cookie from the stored cookie information; (3) the second HTTP GETrequest is generated in accordance with the second data; (4) whereinsaid cookie information receiving means receives the cookie informationfrom a client proxy, the client proxy either being part of or separatefrom the second apparatus.

Additionally, the present invention relates to a first apparatuscomprising: means for receiving via a network connection, in a casewhere a first HTTP GET request for a first URL has been generated by asecond apparatus, first data from which the first URL can be obtained;means for receiving, from a web server associated with the first URL,second data from a HTTP response to a HTTP GET request for the firstURL; cookie information receiving means for receiving via a networkconnection cookie information corresponding to a cookie of a first webbrowser of the second apparatus, the cookie information being other thancookie information from a HTTP header; and means for storing the cookieinformation; a second web browser adapted to generate a second HTTP GETrequest for a second URL; means for determining, based on the storedcookie information, if the first web browser were to have generated arequest for the second URL, whether such request would use a cookie; andmeans for, if said determining means determines that a request for thesecond URL would use a cookie if it had been generated by the first webbrowser, attaching a cookie from the stored cookie information to thesecond HTTP GET request to form a modified second HTTP GET request;means for receiving, from a web server associated with the second URL,third data from a HTTP response to the modified second HTTP GET requestfor the second URL; and means for updating cookie information stored insaid second web browser in accordance with the cookie from the storedcookie information, wherein a memory and processor are included in thefirst apparatus, wherein in response to the first web browser of thesecond apparatus generating a HTTP GET request that uses a cookie, aclient proxy obtains cookie information in accordance with the cookieand sends the cookie information to said cookie information receivingmeans, wherein in response to an HTTP response sent to the first webbrowser of the second apparatus including a set cookie request, a clientproxy obtains cookie information in accordance with the set cookierequest and sends the cookie information to said cookie informationreceiving means, and wherein the first web browser also receives thethird data. Optionally, the following may be satisfied: wherein saidupdating means includes means for attaching the cookie from the storedcookie information to a HTTP response to the second HTTP GET requestwhich is received by said second web browser.

Still further, the present invention, in another aspect, also relates toa device comprising: a processing unit comprising a processor; and amemory unit storing a control program to be executed by the processingunit, said memory unit comprising a memory, wherein the control programis configured to: (a) receive via a network connection data relating toa URL of a first HTTP GET request, the first HTTP GET request havingbeen generated by a web browser of a client apparatus; (b) generate asecond HTTP GET request for the URL; (c) receive, from an apparatuscorresponding to the URL, a HTTP response to the second HTTP GETrequest; (d) receive, via a network connection, cookie informationcorresponding to a cookie of the web browser of the client apparatus,the cookie information being separate from information in a cookie fieldof an HTTP header; and (e) store the cookie information.

Further, in another aspect, the present invention relates to a methodcomprising: a first receiving step, performed by an apparatus comprisinga processor and a memory, of receiving via a network connection datarelating to a URL from a first HTTP GET request, the first HTTP GETrequest having been generated by another apparatus; generating, inaccordance with the received data, a second HTTP GET request for a URL;a second receiving step of receiving, from a web server associated withthe URL, a HTTP response to the second HTTP GET request, the HTTPresponse having been generated by the web server; a third receiving stepof receiving via a network connection cookie information correspondingto a cookie of a web browser of the another apparatus, the cookieinformation being apart from an HTTP header's cookie fields; and storingthe cookie information. A memory may store a program that when executedby an apparatus effects the foregoing method.

Still further, in another aspect, the present invention relates to afirst apparatus comprising: means for receiving, from a web server,first data from a first HTTP response generated by the web server inresponse to a first HTTP GET request for a first URL generated by a webbrowser in a second apparatus; and means for causing the web browser toreceive a second HTTP response that differs from the first HTTP responsein that the second HTTP response contains data which causes the webbrowser to generate a second HTTP request in response to a web pagereceived in response to the first HTTP GET request reaching a specifiedstage of loading in the web browser, wherein a memory and processor areincluded in the first apparatus. Optionally, one or more of thefollowing may be satisfied: (1) wherein the second HTTP responseincludes data which causes the web browser to generate the second HTTPrequest in response to the end of the web page's HTML response havingbeen parsed; (2) wherein the second HTTP response includes data whichcauses the web browser to generate the second HTTP request in responseto the web browser generating a page load Javascript event; (3) whereina timing of the first HTTP GET request is a start time of a timeinterval for loading of the web page; (4) wherein the timing of thesecond HTTP request is a finish time of the time interval for loading ofthe web page; (5) wherein the second HTTP response includes data whichcauses the web browser to generate the second HTTP request in responseto the web browser generating a page load Javascript event, and whereinthe time interval for loading of the web page is measured according tothe start time and the finish time; (6) wherein said causing meanscomprises modifying means for obtaining, from the first data, modifiedfirst data which is included in the second HTTP response, wherein saidmodifying means modifies markup language code in the first data suchthat the web browser of the second apparatus, by processing the modifiedmarkup language code, generates the second HTTP request; (7) wherein themarkup language code is HTML code, and wherein said causing meanscomprises means for sending data relating to the modified markuplanguage code for receipt by the second apparatus so that the webbrowser processes the modified markup language code; (8) wherein themarkup language code comprises HTML code, and wherein said modifyingmeans comprises means for inserting Javascript into the HTML code toproduce the modified markup language code; (9) wherein the insertedJavascript comprises a page load event handler; (10) wherein the pageload event handler corresponds to an event that the web page hasfinished loading in the web browser; (11) wherein the page load eventhandler, when executed by the web browser, generates the second HTTPrequest; (12) wherein the second HTTP request is a request for a URLthat contains text dependent upon a time; (13) wherein the time is atime when the page load event handler is invoked.

And another aspect of the present invention is a first apparatuscomprising: a processor; a memory storing a control program to beexecuted by the processor; and a hardware network interface, wherein thecontrol program comprises programming code instructions by which thecontrol program is configured to: (a) receive via a network connectionfirst data from a first HTTP response to a first HTTP GET request for aURL generated by a web browser in a second apparatus; and (b) causingthe web browser to receive a second HTTP response that differs from thefirst HTTP response in that the second HTTP response contains data whichcauses the web browser to generate a second HTTP request in response toa web page received in response to the first HTTP GET request reaching aspecified stage of loading in the web browser. Optionally, any one ormore of the following may be satisfied: (1) wherein the second HTTPresponse includes data which causes the web browser to generate thesecond HTTP request in response to the end of the web page's HTMLresponse having been parsed; (2) wherein the second HTTP responseincludes data which causes the web browser to generate the second HTTPrequest in response to the web browser generating a page load Javascriptevent; (3) wherein a timing of the first HTTP GET request is a starttime of a time interval for loading of the web page; (4) wherein thetiming of the second HTTP request is a finish time of the time intervalfor loading of the web page; (5) wherein the second HTTP responseincludes data which causes the web browser to generate the second HTTPrequest in response to the web browser generating a page load Javascriptevent, and wherein the time interval for loading of the web page ismeasured according to the start time and the finish time.

Another aspect of the present invention is: an apparatus-implementedmethod comprising: receiving by a first apparatus comprising aprocessor, from a web server, first data from a first HTTP responsegenerated by the web server in response to a first HTTP GET request fora first URL generated by a web browser in a second apparatus; andcausing the web browser to receive a second HTTP response that differsfrom the first HTTP response in that the second HTTP response containsdata which causes the web browser to generate a second HTTP request inresponse to a web page received in response to the first HTTP GETrequest reaching a specified stage of loading in the web browser.Optionally, one or more of the following may be satisfied: (1) whereinthe second HTTP response includes data which causes the web browser togenerate the second HTTP request in response to the end of the webpage's HTML response having been parsed; (2) wherein the second HTTPresponse includes data which causes the web browser to generate thesecond HTTP request in response to the web browser generating a pageload Javascript event; (3) wherein the timing of the first HTTP GETrequest is a start time of a time interval for loading of the web page;(4) wherein the timing of the second HTTP request is a finish time ofthe time interval for loading of the web page; (5) wherein the secondHTTP response includes data which causes the web browser to generate thesecond HTTP request in response to the web browser generating a pageload Javascript event, and wherein the time interval for loading of theweb page is measured according to the start time and the finish time;(6) wherein said causing comprises: modifying the first data to obtainmodified first data which is included in the second HTTP response; andsending by the first apparatus of data relating to the modified firstdata to the second apparatus for execution by the second apparatus's webbrowser, and wherein the modified first data, upon execution by the webbrowser, causes the web browser to generate the second HTTP request; (7)wherein said modifying comprises injecting Javascript into the firstdata to obtain the modified first data, and wherein the Javascriptincludes Javascript that, upon execution by the web browser, generatesthe second HTTP request for a second URL; (8) wherein the second URL isa function of time; (9) wherein the Javascript includes a page loadevent handler that is configured to, in response to a web page loadcompletion event, generate the second HTTP request; (10) a tangible,non-transitory apparatus-readable memory storage medium may storeprogram code instructions that upon execution automatically effect themethod.

In another aspect, the present invention relate to a method comprising:injecting, by a first apparatus comprising a processor and a memory, ofJavascript into a HTTP response to be received by a second apparatusthat generated a first HTTP GET request to which the HTTP responsecorresponds, wherein the Javascript includes Javascript which was notpresent in the HTTP response before the injection and which, uponexecution by the second apparatus, causes the second apparatus togenerate a second HTTP request in response to a web page received inresponse to the first HTTP GET request reaching a specified stage ofloading in the second apparatus. A non-ephemeral computer-readablememory may store a program that effects the method when executed by acomputer.

In the foregoing, preferably the second HTTP request is an HTTP GETrequest.

And another aspect of the present invention is an apparatus-implementedmethod comprising: receiving by a first apparatus comprising aprocessor, via a network connection, of Javascript from a HTTP response;and injecting, by the first apparatus into the Javascript, of a pageload event handler that is triggered in response to finishing of loadingof a web page by a web browser. Optionally, one or more of the followingmay be satisfied: (1) wherein the page load event handler generates aHTTP GET request in response to the finishing of loading of a web page;(2) wherein the page load event handler generates a HTTP POST request inresponse to the finishing of loading of a web page; (3) wherein the pageload event handler generates a HTTP PUT request in response to thefinishing of loading of a web page; (4) further comprising sending, viaa network connection to a second apparatus, the Javascript having beeninjected with the page load event handler; (5) wherein the secondapparatus executes the injected Javascript and the page load eventhandler generates a HTTP GET request in response to the finishing ofloading by a web browser of the second apparatus of a web page.

In another aspect, the present invention relates to a first apparatuscomprising: means for receiving, from a web server, first data from afirst HTTP response generated by the web server in response to a firstHTTP GET request for a first URL generated by a web browser in a secondapparatus; modifying means for obtaining, from the first data, modifiedfirst data; and means for sending data relating to the modified firstdata such that a second HTTP response containing the modified first datais received by the web browser as a response to the first HTTP GETrequest, wherein said modifying means inserts Javascript into HTML codewithin the first data to produce the modified first data, wherein theinserted Javascript comprises a page load event handler which, whenexecuted by the web browser, generates a second HTTP request, wherein atiming of the first HTTP GET request is a start time of a time intervalfor loading of a web page, wherein a timing of the second HTTP requestis a finish time of the time interval for loading of the web page, andwherein a time interval for loading of the web page is measuredaccording to the start time and the finish time.

Still further, in another aspect, the present invention relates to anapparatus-implemented method carried out by a system comprising aprocessor and a memory, the method comprising: receiving, by a clientproxy, of a first HTTP GET request generated by a web browser of aclient apparatus for a first URL; recording, by the client proxy, oftime of receipt of the first HTTP GET request; editing, by the clientproxy, of Javascript to provide code configured to cause the web browserof the client apparatus to generate a second HTTP request; sending, bythe client proxy, to the web browser of the client apparatus of an HTTPresponse comprising the code; generating by the web browser of theclient apparatus of the second HTTP request in response to receipt ofthe HTTP response comprising the code; receiving, by the client proxy,of the second HTTP request; recording, by the client proxy, of time ofreceipt of the second HTTP request; and computing a response time inaccordance with a difference between the time of receipt of the firstHTTP GET request as recorded by the client proxy and the time of receiptof the second HTTP request as recorded by the client proxy. Optionally,one or more of the following may be satisfied: (1) wherein the code isconfigured such that the second HTTP request is a last HTTP GET requestcarried out by the web browser when processing the HTTP response; (2)wherein the code comprises an end-of-page event handler.

In the foregoing, the second HTTP request is preferably a HTTP GETrequest.

These and other objects, aspects, advantages and features of the presentinvention will become more apparent from the following detaileddescription of the presently preferred embodiments taken in conjunctionwith the accompanying drawings.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a schematic diagram showing a satellite communications systemin accordance with the present invention.

FIG. 2 comprises FIGS. 2( a) and 2(b) which are schematic diagramsshowing a client sub-system in accordance with the present invention,where FIG. 2( a) depicts the physical features within the clientsub-system and FIG. 2( b) depicts the software features within theclient sub-system.

FIG. 3 comprises FIGS. 3( a) and 3(b) which are schematic diagramsshowing an Internet Service Provider (ISP) sub-system in accordance withthe present invention, where FIG. 3( a) depicts the physical featureswithin the ISP sub-system and FIG. 3( b) depicts the software featureswithin the ISP sub-system.

FIG. 4 shows a web page to be obtained by a web browser, in accordancewith the present invention.

FIG. 5 is a sequence diagram (also colloquially referred to as a ladderdiagram or timing diagram) showing the operation of a pre-fetch featureof the present invention.

FIG. 6 is a flow diagram showing the pre-fetch feature operation of theproxy server of the present invention.

FIG. 7 is a flow diagram showing the interactive pre-fetch featureoperations of the client browser and the client proxy program of thepresent invention.

FIG. 8 is a sequence diagram showing the contents of selectedtransmissions in accordance with the present invention.

FIG. 9 is a flow diagram showing a Javascript modification feature ofthe present invention.

FIG. 10 is a sequence diagram showing the re-definition of theMath.random( ) function according to the present invention.

FIG. 11 is a sequence diagram showing the adding of a RandomNew( )function according to the present invention.

FIG. 12 comprises FIGS. 12( a) and 12(b) which show Javascript coderelating to the re-definition of the Math.random( ) function accordingto the present invention, where FIG. 12( a) shows the originalJavascript code and FIG. 12( b) shows the modified Javascript code withthe re-defined Math.random( ) function.

FIG. 13 comprises FIGS. 13( a) and 13(b) which show Javascript coderelating to the addition of the RandomNew( ) function according to thepresent invention, where FIG. 13( a) shows the original Javascript codeand FIG. 13( b) shows the modified Javascript code.

FIG. 14 is a sequence diagram showing the re-definition of the Dateobject according to the present invention.

FIG. 15 is a sequence diagram showing the adding of a DateNew objectaccording to the present invention.

FIG. 16 is a sequence diagram showing obtaining of the client browserspecifics according to the present invention.

FIG. 17 is a flow diagram showing the client browser specifics obtainingfeature of the present invention.

FIG. 18 is a sequence diagram showing the cookie tracking feature of thepresent invention.

FIG. 19 is a flow diagram showing the cookie tracking feature of thepresent invention, when the client proxy does not contain promised orpre-fetched data.

FIG. 20 is a flow diagram showing the cookie tracking feature of thepresent invention, when the proxy server receives a HTTP request fromthe virtual browser.

FIG. 21 is a flow diagram showing the cookie tracking feature of thepresent invention, when the client proxy contains promised orpre-fetched data.

FIG. 22 is a sequence diagram showing the web page response time featureof the present invention.

FIG. 23 is a flow diagram showing the web page response time feature ofthe present invention.

FIG. 24 comprises FIGS. 24( a) and 24(b) which show sample Javascriptcode within a HTML document which requests URLs.

FIG. 25 comprises FIGS. 25( a) and 25(b) which are schematic diagrams ofan alternative embodiment of the present invention, where the clientproxy program is executed within the client PC. FIG. 25( a) depicts thephysical features within the client sub-system and FIG. 25( b) depictsthe software features within the client sub-system.

FIG. 26 comprises FIGS. 26( a) and 26(b) which show sample C# code forimplementing the web page response time feature of the presentinvention.

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS First Embodiment (1)General Description

FIG. 1 shows an embodiment of the present invention. Reference numeral 1denotes a satellite communications system of the present invention. Thatsystem includes a client sub-system 100 and an Internet Service Provider(ISP) sub-system 200. System 1 is intended to provide Internetconnectivity for client sub-system 100. While sub-system 200 isdescribed as being a sub-system of an Internet Service Provider, it isnot so limited and can represent any sub-system providing the describingfunctions. In other words, sub-system 200 does not have to be a InternetService Provider.

Client sub-system 100 communicates with ISP sub-system 200 bytransmitting and receiving signals over a satellite network link 20 withsatellite 10. ISP sub-system 200 communicates with client sub-system 100by transmitting and receiving signals over a satellite network link 30with satellite 10. Thus, a communication from client sub-system 100 toISP sub-system 200 is first transmitted through satellite link 20 tosatellite 10, which relays it through satellite link 30 to ISPsub-system 200. Conversely, a communication from ISP sub-system 200 toclient sub-system 100 is first transmitted through satellite link 30 tosatellite 10, which relays it through satellite link 20 to clientsub-system 100. Satellite links 20 and 30 are generally high-latencylinks, due to the inherent delay in transmitting and receiving data overthe long distance.

ISP sub-system 200 has a network link 40 to the Internet 50. Thus, ISPsub-system 200 can communicate with web servers 300 and 301 throughnetwork links 60 and 61, respectively. As shown, web servers 300 and 301are connected to the Internet 50 through network links 60 and 61. Webservers 300 and 301 could be, by way of example and not of limitation,web servers on the Internet such as a web server corresponding to thedomain name uspto.gov and a web server corresponding to the domain namehughes.net, respectively. Preferably, client sub-system 100, ISPsub-system 200, web server 300, and web server 301 are all associatedwith IP addresses which are different from each other, and they allrepresent separate, distinct nodes on a network, each being connected tothe network by a network link or network connection.

FIGS. 2( a) and (b) show the client sub-system 100 in further detail.FIG. 2( a) shows a physical representation of client sub-system 100.

Preferably, client sub-system 100 includes a client PC 110 and a router130. Client PC 110 preferably comprises a central processing unit (CPU)111, a memory 112, a hardware network interface (such as a networkinterface card (NIC)) 113, and software 150. CPU 111 may also bereferred to as a processor, and preferably comprises hardware circuitryfor carrying out computer programming code instructions stored in amemory. Memory 112 may include any physical, non-transitory, tangible,non-ephemeral, computer-readable storage or recording medium such as,for example, one or more of non-volatile memory, random access memory(RAM), read-only memory (ROM), flash memory, a hard drive, etc. CPU 111and memory 112 are used for executing software 150 on client PC 110. Inparticular, software 150 includes one or more computer programs eachcomprising computer programming code instructions to be executed by CPU111. And while software 150 is schematically depicted as separate frommemory 112, software 150 can be stored in memory 112 for execution byCPU 111. Also, while software 150 is schematically depicted ascommunicating with network interface 113, it will be appreciated that,in actuality, it may be the case that CPU 111 electrically communicateswith network interface 113 under the direction of software 150.

Router 130 preferably includes a satellite interface 131, a CPU 132, amemory 133, a hardware network interface 134, and software 160. CPU 132,memory 133, and network interface 134 are constructed like CPU 111,memory 112, and network interface 113 described above. Satelliteinterface 131 is a hardware network interface for connecting to asatellite dish to send and receive data over a satellite link. Inparticular, satellite interface 131 communicates with satellite 10 viasatellite link 20. The client PC 110 and the router 130 communicate witheach other via network link 101. Link 101 preferably is a wired orwireless local-area-network (LAN) according to IEEE 802.x standards, butcan be any type of data link or communication network which can transferdata between two devices. If link 101 is a LAN, then NIC 113 and NIC 134preferably have IP addresses which are different from each other. CPU132 and memory 133 are used for executing software 160 on router 130,where software 160 comprises one or more programs each comprisingcomputer programming code instructions to be executed by CPU 132. Whilesoftware 160 is schematically depicted as separate from memory 133,software 160 can be stored in memory 133 for execution by CPU 132.Again, while software 160 is schematically depicted as communicatingwith network interface 134, it will be appreciated that, in actuality,it may be the case that CPU 132 actually electrically communicates withnetwork interface 134.

FIG. 2( b) schematically shows the software 150 and 160 executed withinclient PC 110 and router 130, respectively. Software 150 includes (a) aclient HTTP web browser 120 such as, for example, the Firefox webbrowser, which is a computer program for network or Internet webbrowsing, and (b) a TCP/IP stack 121 which is a computer program foreffecting TCP/IP network communications. Client web browser 120retrieves a web page for a URL specified by a client user (e.g.,specified by a person using an input device such as a mouse or keyboard)and displays the retrieved web page on a display screen (e.g., for theperson to view). Meanwhile, TCP/IP stack 121 interfaces with networkinterface 113 to send and receive network data, including dataoriginating from or destined to client browser 120.

Router 130's software 160 includes routing software 140 for routingnetwork traffic to and from link 101. Routing software 140 interfaceswith satellite interface 131 to send and receive network data oversatellite link 20. Software 160 also includes client proxy software 141for interfacing with proxy server software in ISP sub-system 200, asdiscussed later. Client proxy software 141 interfaces with networkinterface 134 to operate as a proxy between the routing software 140 andthe client PC 110. Preferably, router 130 performs a Layer 4 switchfunction to transparently re-direct HTTP requests to client proxyprogram 141, but one of ordinary skill in the art would appreciate thatany appropriate networking arrangement which gets an HTTP request to theclient proxy could be substituted.

FIGS. 3( a) and 3(b) show the ISP sub-system 200 in further detail. FIG.3( a) shows a physical representation of ISP sub-system 200. ISPsub-system 200 includes a satellite interface 210, a hardware networkinterface 220 such as a NIC, and a proxy server 250. Proxy server 250 ispreferably a computer, and includes a CPU 251, a memory 252, software230, and a hardware network interface 253 such as a NIC. CPU 251 andmemory 252 are used for executing software 230 on proxy server 250. CPU251 and memory 252 are constructed like CPU 111 and memory 112 describedabove, and software 230 may be stored in memory 252. Software 230comprises one or more computer programs each comprising computerexecutable instructions or programming code for execution by CPU 251.

Satellite interface 210 sends and receives data over satellite link 30and communicates with other devices within ISP sub-system 200 usingnetwork interface 220. Network interface 220 communicates with networkinterface 253 via network link 201 which may be, for example, a LANlink. Proxy server 250 communicates with client sub-system 100 by anetwork connection that uses links including network link 201, satellitelink 30, and satellite link 20. Meanwhile, proxy server 250 communicateswith the Internet 50 using network link 40.

FIG. 3( b) shows the software 230 executed within proxy server 250.Software 230 includes a control module 260 (e.g., a computer program)and a pre-fetch virtual browser 270. The latter may be, for example, aHTTP web browser computer program such as Firefox, preferably theFirefox browser having been enhanced to be controlled by an externalprogram such as control module 260. Control module 260 controls theoperation of virtual browser 270. Control module 260 also operates as aproxy for virtual browser 270. That is, control module 260 interceptsdata requests (e.g., a request for a URL) made by virtual browser 270and also relays response data (e.g., a response to a request for a URL)to virtual browser 270. Control module 260 further interfaces withclient proxy program 141 within router 130 of client sub-system 100, aslater discussed.

Control module 260 also includes a cookie tracker module 261 and aJavascript modifier module 262. Cookie tracker module 261 tracks cookieswithin requests and responses sent by client browser 120 within clientPC 110, in coordination with client proxy program 141 within router 130.Javascript modifier module 262 receives HTML and is configured to, whenappropriate, modify Javascript within the HTML. Alternatively, module262 receives Javascript and outputs modified Javascript. Modules 260-262are preferably implemented as computer programs executed by CPU 251.

Virtual browser 270 comprises a cookie storage module 271 and aJavascript execution module 272. Preferably, virtual browser 270 alsoincludes other components such as, by way of example and not oflimitation, an HTML parser, web page renderer, HTTP client, etc. Cookiestorage module 271 stores cookies within virtual browser 270 such thatwhen a web page is requested, any cookie or cookies associated with thatweb page are retrieved and attached with the request. Javascriptexecution module 272 receives Javascript code within HTML and executesthe Javascript. Modules 271-272 are preferably implemented as computerprograms executed by CPU 251. The executed Javascript can perform avariety of functions, including requesting a URL for an additionalimages, a sound clip, a video, or other forms of media. Such a URL canbe either static or dynamic. A static URL is a fixed string of text suchas, for example, “www.uspto.gov/logo.jpg”. On the other hand, a dynamicURL is dynamically generated. For example, a dynamic URL could bedefined by the following: “www.uspto.gov/logo-”+SIZE+“.jpg”, which isdependent on the variable SIZE. Therefore, if SIZE=“big”, thedynamically-generated URL would be “www.uspto.gov/logo-big.jpg”, whereasif SIZE=“small”, the dynamically-generated URL would be“www.uspto.gov/logo-small.jpg”. Thus, upon execution of the Javascript,a URL is dynamically generated.

(2) Operation of Pre-Fetching Feature

FIGS. 4-8 describe the pre-fetching feature of the present invention.FIG. 4 shows an example of a web page 400 that client browser 120requests (e.g., by generating a HTTP GET request for a URL correspondingto that web page). FIG. 5 shows the communications between thecomponents of system 100. FIG. 6 shows steps for the operation of proxyserver 250. FIG. 7 shows steps for the operation of client browser 120and client proxy program 141. FIG. 8 shows the contents of selectedtransmissions depicted in FIG. 5.

How client browser 120 loads a web page will now be described. Assumethat the web page is an Internet web page which, like many web pages, isformatted in HyperText Markup Language (HTML). First, the user enters aparticular Uniform Resource Locator (URL) into the client browser 120.For example, the user types the URL www.webserver1.com/index.html intothe address bar of the client browser 120. The client browser 120 thengenerates a HTTP GET request for that URL. The client browser 120 thenreceives a HTTP response in response to the HTTP GET request. The HTTPresponse may, by way of example, include an HTML document containingHTML code that includes both (a) the web page's text, which is to bedisplayed, and (b) additional links to, for example, an image or otherforms of content, which are also to be displayed. The additional linksmay be static links included in the HTML. Alternatively, the HTMLdocument from the HTTP response may include Javascript that whenexecuted by the client browser generates an additional link (i.e., adynamically-generated link). The client browser 120 then processes theHTML document by parsing the HTML document, resulting in (a) displayingthe web page's text, (b) requesting each additional link (i.e.,generating a HTTP GET request for each additional link), and (c) uponreceiving the requested content (e.g., in a HTTP response to eachrespective HTTP GET request), displaying the same.

FIG. 4 shows a specific example. In more detail, as shown therein, webpage 400, as displayed on the screen of the client browser 120 whenfully loaded, includes text 401, a first image 402 (“smiley.jpg”), and asecond image 403 (“ad.jpg”) such as an advertisement. In this specificexample, the client browser 120 generates a HTTP request for a URL,receives a HTTP response including HTML code, the HTML code comprising(a) text 401, (b) Javascript which when executed generates a URL forfirst image 402, and (c) Javascript which when executed generates a URLfor second image 403. Here, the URLs for first image 402 and secondimage 403 are dynamically-generated URLs. The client browser 120 createsrequests for these dynamically-generated URLs, i.e., the client browser120 generates a HTTP GET request for the URL for first image 402 and aHTTP GET request for the URL for second image 403. In this example, theURL for first image 402 corresponds to the same web server as the URL ofweb page 400, whereas the URL for second image 403 corresponds to aseparate web server. Sample fragments of Javascript code which createrequests for URLs are depicted in FIGS. 24( a) and 24(b), i.e., theseare examples of dynamic URL generation by Javascript.

The operative steps of proxy server 250 will now be described, withreference to FIGS. 5 and 6. First, client browser 120 generates a HTTPGET request for the URL www.webserver1.com/index.html, as discussedabove, and client PC 110 sends the same on a network connection as acommunication or transmission depicted by reference numeral 501. Theabove URL corresponds to a particular web server, Web Server #1 in thisexample. Preferably, HTTP GET request 501 is sent on an HTTP connectionwhere an IP packet has client PC 110's IP address as a source IP addressand Web Server #1's IP address as a destination IP address. In moredetail, the HTTP GET request 501 is sent out from client PC 110 by wayof TCP/IP stack 121 and NIC 113 to link 101, which constitutes sendingthe HTTP GET request on a network connection.

Client proxy program 141 receives the HTTP GET request 501. In moredetail, client proxy program 141 receives the HTTP GET request 501 viaNIC 134 (which is connected to link 101). Client proxy program 141, inresponse to receiving the HTTP GET request, sends communication ortransmission 502 to proxy server 250, the communication including dataor information relating to communication or transmission 501, as laterdiscussed with respect to FIG. 7. From this data or information, the URLcan be obtained; for example, the data or information could comprise orbe the URL or even the entire HTTP GET request. In step S600 in FIG. 6,proxy server 250 receives communication or transmission 502 from clientsub-system 100. As will be understood, such constitutes receipt ofcommunication or transmission 502 by proxy server 250 via a networkconnection (i.e., via routing 140, satellite interface 131, link 20,satellite 10, link 30, satellite interface 210, NIC 220, link 201, andNIC 253, for example).

In a preferred embodiment, communication between client sub-system 100and the ISP sub-system 200 may be transmitted and received according toa non-standard application layer protocol running over a TCP connection.Such a non-standard application layer protocol may be beneficial over anindustry-standard format in optimizing data transmission throughputbetween sub-systems. For example, a proprietary format may compress thedata transmission to reduce the total required transmission amount, ormay combine multiple requests into a single transmission to reduceoverhead. Preferably, the proprietary format is used only between router130 and proxy server 250 so that client PC need not be modified to useany proprietary protocol. Thus, for HTTP GET request 501 made by clientbrowser 120, router 130 encodes HTTP GET request 501 into a proprietaryformat and transmits that data as communication 502. Then, ISPsub-system 200 receives communication 502 and decodes the data toextract the contents of the HTTP GET request 501. However, one ofordinary skill in the art would appreciate that the actual data request,or that any other network protocol format or combination thereof, couldbe used as a network transmission format. For example, a conventional,non-propriety network protocol like TCP/IP could be used.

In step S601, proxy server 250 forms (i.e., generates) its own HTTP GETrequest 503 for the same URL as HTTP GET request 501. In an embodiment,an IP packet used by proxy server 250 when sending HTTP GET request 503is configured with the proxy server 250's IP address as the sourceaddress and Web Server #1's address as the destination address.Alternatively, the system may have advanced routing features, wherebyproxy server 250 may instead send HTTP GET request 503 within an IPpacket configured with another source address, such as an IP address ofclient sub-system 100. Web Server #1, upon receipt of HTTP GET request503, generates a HTTP response 504 in response to the request, and sendsthe HTTP response 504 to proxy server 250.

In step S602, proxy server 250 receives HTTP response 504 from webserver #1. HTTP response 504 may include, for example, a HTML documentwhich represents the layout pattern and text 401 of web page 400. Inthis example, the HTML document does not include the images 402 and 403themselves, but instead includes Javascript code which, when executed,dynamically generates URLs for image 402 and image 403, as discussedabove. Of course, the present invention is not limited todynamically-generated URLs, and one or more URLs included in the HTMLdocument could be static URLs instead. Preferably, both dynamic URLs andstatic URLs are pre-fetched.

In step S603, proxy server 250 sends a transmission 505 via a networkconnection to client proxy program 141. Transmission 505 comprises theHTML document from HTTP response 504, or may comprise the entire HTTPresponse 504. As later discussed, proxy server 250 may modify the HTML(e.g., modify Javascript in the HTML) before sending the same. As alsolater discussed, client proxy program 141 uses transmission 505 togenerate a HTTP response to web browser 120's HTTP GET request 501,which response may include the HTML document or modified HTML document.

In step S604, proxy server 250 executes the Javascript within the HTMLdocument, as seen in block 507 in FIG. 5. More specifically, controlmodule 260 first forwards the HTML document to virtual browser 270 forprocessing as if for actual display. (To forward the HTML document tovirtual browser 270, the control module 260 preferably commands virtualbrowser 270 to retrieve the web page's URL by having virtual browser 270generate an HTTP GET request for that URL, intercepts that HTTP GETrequest generated by virtual browser 270, and returns to the virtualbrowser 270 an HTTP response including the HTML document.) Virtualbrowser 270 processes the HTML document and therefore forms a virtuallayout of HTML page 400. Virtual browser 270 also executes theJavascript within the HTML document using Javascript execution module272.

Javascript is frequently used to enable additional functionality in webpages. Javascript accomplishes this functionality by allowing specificdefined functions to be defined and to be executed. The additionalfunctionality includes, among other features, the ability to modify theoriginal HTML code such that a custom web page is displayed. Forinstance, the Javascript may create a dynamic URL in the HTML code.

In this case, Javascript execution module 272, in executing theJavascript, produces URLs to smiley.jpg and ad.jpg (i.e., the first andsecond images 402 and 403), which virtual browser 270 requests forretrieval. Since control module 260, in the preferred embodiment, actsas a proxy for virtual browser 270, control module 260 intercepts therequests for these URLs. Since the same Javascript is subsequently goingto be executed by client browser 120, control module 260 recognizes thatclient browser 120 will later request these URLs. Virtual browser 270also requests retrieval of any static URLs in the HTML code in a similarmanner (not shown in this example).

Thus, in step S605, control module 260 pre-fetches these additionalURLs. That is, control module 260 forms (i.e., generates) HTTP GETrequest 508 for smiley.jpg, and forms HTTP GET request 510 for ad.jpg.Since the URL for smiley.jpg (i.e., first image 402) corresponds towww.webserver1.com, control module 260 sends HTTP GET request 508 to WebServer #1. Since the URL for ad.jpg (i.e., second image 403) correspondsto www.webserver2.com, HTTP GET request 510 is sent by control module260 to Web Server #2.

At the same time, in step S606, control module 260 also sends pre-fetchnotifications (“promises”) 509 and 511 via a network connection toclient proxy program 141 for URLs corresponding to smiley.jpg (firstimage 402) and ad.jpg (second image 403), respectively. These pre-fetchnotifications comprise data serving as notifications which inform clientproxy program 141 that proxy server 250 has started the process ofpre-fetching content (i.e., smiley.jpg and ad.jpg) for the URLs inquestion, effectively “promising” that the content will be subsequentlysent.

In step S607, control module 260 receives HTTP responses 512 and 514 forHTTP GET requests 508 and 510, respectively, from Web Server #1 and WebServer #2, respectively. The HTTP responses contain the content imagedata for smiley.jpg and ad.jpg (i.e., the first and second images 402and 403).

In step S608, control module 260 relays the content image data ofsmiley.jpg and ad.jpg to client proxy program 141 to satisfy thepreviously-made pre-fetch notifications 509 and 511, respectively. Aspreviously mentioned, the preferred embodiment encapsulates all data tobe transmitted between client sub-system 100 and ISP sub-system 200,including the content image data, into a proprietary networktransmission format. However, any network transmission format, includingindustry-standard formats, or combinations thereof, can be alternativelyused in connection with the present invention. For example, controlmodule 260 could send the entire HTTP response to client proxy program141 via a standard TCP/IP connection.

At the same time, in step S609, control module 260 also relays thecontent image data of smiley.jpg and ad.jpg to virtual browser 270 sothat virtual browser 270 loads the images in the web page. This ensuresthat, in a circumstance where the pre-fetched data contains links toadditional content, any additional required pre-fetching is performed tocompletely load the web page,

The operation of client browser 120 and client proxy program 141 willnow be described, with reference to FIGS. 5 and 7.

In step S700, client browser 120 requests a URL. Usually, the request isby a user of client PC 110 requesting the URL (e.g., by entering a URLinto an address bar displayed on the screen by client browser 120, or byclicking using a mouse on a link to a URL, the link being displayed onthe screen by client browser 120).

In step S701, client browser 120 forms (i.e., generates) a HTTP GETrequest 501 for the URL and sends the HTTP GET request 501 according tothe network settings in TCP/IP stack 121. TCP/IP stack 121 is configuredsuch that Internet communications are routed to router 130. Accordingly,the request 501 is sent by client PC 110 via a network connection and isreceived by router 130.

In step S702, client proxy program 141 intercepts HTTP GET request 501and relays the HTTP GET request to ISP sub-system 200 as communication502. As previously mentioned, the preferred embodiment encapsulatescommunication 502 using a proprietary network transmission format, butany format can be used in connection with the present invention. Insteadof sending the entire HTTP GET request, client proxy program 141 maysend just the URL, or data from which the URL can be obtained.

In step S703, client proxy program 141 receives transmission 505 whichcomprises the HTML document corresponding to the requested URL. Again,transmission 505 may instead comprise the entire HTTP response thatcomprises the HTML document.

In step S704, client proxy program 141 forms (i.e., generates) a HTTPresponse 506 in accordance with transmission 505. In particular, clientproxy program 141 generates a HTTP response 506 which contains the HTMLdocument from transmission 505 and transmits the HTTP response 506 toclient browser 120 (so as to respond to the client browser's HTTP GETrequest of step S701). As can be seen, all communications between clientbrowser 120 and Web Server #1 are, in the preferred embodiment,“transparent” to client browser 120, and client browser 120 processesHTTP response 506 as if it was originally sent by Web Server #1. Inother words, HTTP response 506 appears to client browser 120 to havecome from Web Server #1. This may be referred to as transparent proxyingbecause client browser 120 thinks that HTTP response 506 came from WebServer #1 even though it was generated by client proxy program 141.

Client browser 120 performs steps S705-S707 during the same period thatclient proxy program 141 performs steps S708-S710. In step S705, clientbrowser 120 processes the HTML document, including executing theJavascript in the HTML document, as seen in block 516 in FIG. 5. Sincethe Javascript is the same code as the Javascript executed by theJavascript execution module 272 of proxy server 250 (in step S604), thesame URLs for smiley.jpg and ad.jpg (i.e., the first and second images402 and 403) will be generated by client browser 120.

In step S706, client browser 120 recognizes that additional content forthose URLs is required to fully display the web page 400. Thus, in stepS707, client browser 120 requests the content for these URLs bygenerating HTTP GET requests 517 and 519 for the smiley.jpg and ad.jpgURLs, respectively. Client browser 120 also requests any static URLs inthe HTML document in a similar manner (not shown in this example).

Meanwhile, client proxy program 141 continuously listens fortransmissions from ISP sub-system 200. In step S708, client proxyprogram 141 receives pre-fetch notifications 509 and 511 sent by controlmodule 260 in proxy server 250. Client proxy program 141 stores thesepre-fetch notifications in memory 133.

In step S709, client proxy program 141 receives transmissions 513 and515, which contain the pre-fetched image data corresponding tosmiley.jpg and ad.jpg, respectively.

In step S710, client proxy program 141 stores the image data aspre-fetched data in memory 133.

In step S711, client proxy program 141, upon receipt of HTTP GETrequests 517 and 519 from client browser 120, checks memory 133, anddetermines whether the URL in each HTTP GET request corresponds to datawhich has already been pre-fetched and stored in memory 133. Asdescribed above for steps S709 and S710, the data for smiley.jpg andad.jpg has already been pre-fetched, received, and stored in thatmemory. Accordingly in step S712, client proxy program 141 sends thepre-fetched smiley.jpg image data in a HTTP response 518 to HTTP GETrequest 517. Client proxy program 141 also sends the pre-fetched ad.jpgimage data in a HTTP response 520 to HTTP GET request 519.

By pre-fetching data which is requested from the HTML document for theoriginal requested URL, the client sub-system 100 is able to obtain theadditional content data in advance of the client browser 120 actuallyrequesting such data. Thus, at least one round-trip delay over satellitelinks 20 and 30 is avoided, thereby reducing delay in fully loading webpage 400. Put another way, this is significant because neither clientbrowser 120 nor client proxy program 141 has sent or relayed either aHTTP GET request for the URL for smiley.jpg or a HTTP GET request forthe URL for ad.jpg over the satellite link. Thus, the present inventionprovides an advantage of preventing sending of a HTTP GET request acrossthe network connection of the satellite link. Furthermore, because proxyserver 250 pre-fetches content not only from static URLs found in a HTTPresponse but also from URLs dynamically generated by Javascript found inthe HTTP response, the dynamically-generated-URL content can bepre-fetched by the proxy server 250 and sent or promised and sent to theclient proxy program 141, which in turn supplies the same to the clientbrowser 120.

For step S711, in the event that data for the additional URLs has notyet been stored in memory, client proxy program 141 proceeds to stepS713. In step S713, client proxy program 141 checks if the URLcorresponds to data which has been promised. If a pre-fetch notificationhas been stored in memory 133 for the URL, then client proxy program 141recognizes that a pre-fetch operation for the URL is already underway,and at least a partial delay can be avoided by simply waiting for thecontent for the URL to be relayed to client sub-system 100 from proxyserver 250.

In step S714, client proxy program 141 finally receives the content data(corresponding to communications 513 and 515 which satisfy promises) andimmediately sends the data to client browser in the form of HTTPresponses 518 and 520, as discussed above with regards to step S712.Client proxy program 141 also implements a timeout period in the eventthat a communications loss has occurred, so it can re-transmit andensure eventual retrieval of the content data.

If client proxy program 141 has not yet received a pre-fetchnotification for the additional URLs, then client proxy program 141implements step S715. In step S715, client proxy program 141 requeststhe URL in a non-pre-fetch manner, to ensure that the content data isretrieved.

FIG. 8 further illustrates transmissions 501, 503, 504, and 506,particularly the contents thereof. As seen in FIG. 8, HTTP GET request501 is preferably encapsulated into a IP packet (i.e., by the TCP/IPstack). IP packets for web page retrieval are customarily sent overestablished TCP connections. IP packets contain a header section withthe source and destination IP addresses of the packet. For request 501,the source IP address is the client browser's 120 IP address and thedestination IP address is the web server's IP address. The IP packetalso has a payload section which contains the HTTP GET request.

HTTP GET request 503 is preferably also encapsulated in an IP packet. Asseen in FIG. 8, the IP packet for request 503 also has a header sectionand a payload section. For request 503, however, the source IP addressis the proxy server's 250 IP address and the destination IP address isthe web server's IP address. This allows HTTP response 504 to request503 to be received by proxy server 250 (since the HTTP response 504 willbe sent using a destination IP address equal to proxy server 250's IPaddress). The IP packet's payload section contains the HTTP GET request503.

HTTP response 504 is also preferably encapsulated in an IP packet withheader and payload sections. The source IP address of this IP packet isthat of the web server, and the destination IP address is that of proxyserver 250. The payload section of the IP packet contains the header ofthe HTTP response, followed by the HTML document.

HTTP response 506 is preferably encapsulated in an IP packet as well.The source IP address of this IP packet is the web server, to ensurethat all intermediate transmissions through proxy server 250 and clientproxy program 141 are transparent to client browser 120. The destinationIP address is that of client browser 120. The payload section of the IPpacket contains a similar, if not identical, header of HTTP response504, followed by HTML. In this case, the HTML is the same as the HTMLwithin HTTP response 504. However, as described below, the HTML withinHTTP response 506 can be modified compared to the original HTML inresponse 504.

Accordingly, the present invention provides the benefits of acceleratedweb page loading over a satellite connection. The present invention isapplicable towards a variety of web browsers including MicrosoftInternet Explorer, Mozilla Firefox, Google Chrome, or any other browser.

Second Embodiment

In the first embodiment, the client proxy program 141 is “transparent”to client browser 120. In other words, the proxy settings of clientbrowser 120 are not set to use client proxy program 141 (i.e., noconfiguration for client browser 120 is necessary). In an alternativesecond embodiment, client browser 120's proxy settings may be set toclient proxy program 141 (i.e., client browser 120 is configured, in itsproxy settings, to specify a network address corresponding to clientproxy program 141 should be used to access a network).

Third Embodiment

In the first two embodiments, client proxy program 141 is located withinrouter 130. However, the present invention is not so limited; instead,client proxy program 141 may be located elsewhere. For example, it maybe located in client PC 110 instead. Such is shown in FIG. 25. In thisthird embodiment, client proxy program 141 is stored within memory 112of client PC 110, and is executed using CPU 111. Preferably, clientbrowser 120 interfaces directly with client proxy program 141, andclient proxy program 141 interfaces with TCP/IP stack 121. Preferably,client browser 120 may have its proxy settings configured to communicatewith client proxy program 141. In this case, the client proxy program141 typically listens in on a network port of NIC 113, and clientbrowser 120's proxy settings are configured with the host beinglocalhost and with that network port.

(3) Javascript Modification Feature

Although the above-discussed pre-fetching feature in FIGS. 4-8 cantransmit an unmodified HTML document of a HTTP response from ISPsub-system 200 to client sub-system 100, the Javascript within the HTMLcan instead be selectively modified prior to the transmission.

Web pages often contain advertisement images, usually as a revenuesource for the web page's owner. These images are sometimes requestedusing Javascript. When this occurs, the Javascript may create a URL forthe image which depends on a Javascript function/object, such as arandom number function which returns a random number or a date objectwhich returns the current date and time. An example of a URL that hasbeen generated in accordance with a random number and a date and timemight be: www.hughes.net/advertisement/1050-20100721-222542 (where 1050represents a four digit random number (typically generated by apseudorandom number algorithm)) and 20100721-222542 represents 10:25 pmand 42 seconds on Jul. 21, 2010. A purpose of using a random numberand/or a date and/or a time when generating a URL is to create a uniqueURL so that a fresh advertisement will be loaded by the browser (sincethe URL is unique, the browser will not find any content stored in itscache for that URL, and thus will generate a HTTP GET request for thatURL, ensuring for the advertiser that a fresh image will be obtained anddisplayed).

Now assume that a HTTP response contains Javascript that uses a webbrowser's built-in Javascript random number function to generate a URLfor an advertising image. If that Javascript is executed on clientbrowser 120, a different random number may or will be returned by therandom number function when the Javascript is executed on virtualbrowser 270. As a result, different URLs may or will be generated by theclient browser 120 and the virtual browser 270. Hence, any pre-fetcheddata obtained by virtual browser 270 will not be matched to the URLrequested by client browser 120. As such, client sub-system 100(specifically client proxy program 141) is required to process theclient browser 120 URL request as a non-pre-fetch request, thusdefeating the benefits of pre-fetching.

This same problem exists for the Javascript built-in Date object,whereby different date/time values may be returned when the Javascriptis executed on client browser 120, compared to when executed on virtualbrowser 270. Such may occur when the respective clocks of client PC 110and proxy server 250 are not perfectly synchronized or where the timezones are not the same. Again, pre-fetched data will not be matched tothe same URL, and client sub-system 100 is required to process the URLrequest as a non-pre-fetch request.

To overcome this problem, the Javascript modification feature of thepresent invention modifies the Javascript in a HTML document such that acustom function is instead executed or a custom object is created andreferenced. The custom function/object allows the same URLs to becreated between client browser 120 and virtual browser 270. Morespecifically, preferably, the proxy server 250 modifies Javascript thatuses an algorithm to generate a URL to thereby obtain modifiedJavascript that uses a different algorithm to generate a URL. Forexample, if the unmodified Javascript uses a date object to generate aURL or for some other purpose, then the modified Javascript could use adifferent date object, or a date function, or something else altogetherdifferent. And if the unmodified Javascript uses a random numberfunction to generate a URL or for some other purpose, then the modifiedJavascript could use a different random number function or somethingelse altogether different.

FIGS. 9-15 describe this Javascript modification feature of the presentinvention. FIG. 9 describes the operation of proxy server 250 inmodifying Javascript. FIGS. 10-13 illustrate the modification of arandom number function in Javascript. FIGS. 14-15 illustrate themodification of a date object in Javascript.

FIG. 9 shows the steps of proxy server 250 in modifying Javascript. Instep S900, proxy server 250 receives communication 1001 from clientproxy program 141, similar to step S600. Communication 1001 contains arequest for a URL, the request having been generated by client proxyprogram 141 in response to receipt by the client proxy program 141 of aHTTP GET request 1000 generated by client browser 120 and sent over anetwork connection to client proxy program 141. Communication 1001 couldcomprise the HTTP GET request 1000 or instead of the entire HTTP GETrequest 1000 just data from which the URL could be obtained (e.g., theURL itself).

In step S901, proxy server 250 forms (i.e., generates) its own HTTP GETrequest 1002 for the same URL, similar to step S601.

In step S902, proxy server 250 receives HTTP response 1003 from the webserver in response to HTTP GET request 1002. Similar to response 504 forstep S602, HTTP response 1003 includes a HTML document which representsthe layout pattern and text 401 of web page 400, but not the graphicscomponents, such as image 402 and image 403. The HTML document alsoincludes Javascript code which, when executed, requests URLs for image402 and image 403.

In step S903, Javascript modifier module 262 within proxy server 250parses (or scans) the Javascript code within the HTML document forreferences to a particular function or object. In the preferredembodiment, the particular functions/objects are the Javascript built-inMath.random( ) function and the Date object's default constructor.

In step S904, Javascript modifier module 262 modifies the Javascriptsuch that the references to the original function or object now refer toa custom function or object. Javascript modifier module 262 can do thisin one of at least two different ways.

One method is a re-write method. In this method, Javascript modifiermodule 262 re-writes the original function or object, so that referencesin the Javascript to the function or object are unmodified, but nowinstead execute the custom function or access the custom object when theunmodified references are executed. This first approach is furtherillustrated in FIGS. 10 and 12 for the Math.random( ) function, and inFIG. 14 for the Date object.

A second method is an insert and search/replace method. In this secondmethod, Javascript modifier module 262 inserts a definition for thecustom function/object as a new function/object, and then searches forand replaces all references in the Javascript to the originalfunction/object with references to the custom function/object. Thissecond approach is further illustrated in FIGS. 11 and 13 for theMath.random( ) function, and in FIG. 15 for the Date object.

Regardless of the particular method used, the Javascript modificationresults in modified Javascript which, when executed, executes the customfunction instead of the original function and/or accesses the customobject instead of the original object. Thus, Javascript which carriesout a first algorithm when executed is modified to obtain modifiedJavascript which carries out a second algorithm, different from thefirst algorithm, instead of the first algorithm.

The custom function and/or custom object returns predictable results,such that dynamic URLs generated by relying on a random number will bethe same when dynamically generated by client browser 120 and whendynamically generated by virtual browser 270.

In step S905, control module 260 sends a communication 1005 includingHTML to client proxy program 141. However, instead of the HTML includingthe original unmodified Javascript, as in step S603, the HTML incommunication 1005 includes the modified Javascript.

In step S906, control module 260 also forwards the HTML including themodified Javascript to virtual browser 270 for processing as if foractual display, in accordance with the above-described pre-fetchingfeature.

In step S907, virtual browser 270 performs the pre-fetching process forthe HTML with modified Javascript. This includes parsing the HTML,executing the Javascript, pre-fetching content of statically anddynamically generated URLs, and sending pre-fetch notifications, asdescribed above in the pre-fetch feature section.

(a) Random Number Function

FIGS. 10 and 12 illustrate the re-write/re-define method for theMath.random( ) function. As previously described with respect to stepsS900-S902, proxy server 250 receives communication 1001 from clientproxy program 141, sends HTTP GET request 1002 to the web server, andreceives from the web server HTTP response 1003. Javascript modifiermodule 262 then performs steps S903-S904, corresponding to block 1004 inFIG. 10. In this case, Javascript modifier module 262 re-defines theMath.random( ) function, as seen in the code modification depicted inFIG. 12.

FIG. 12( a) shows original Javascript code which calls the Math.random() function, and FIG. 12( b) shows modified Javascript code whichre-defines the Math.random( ) function by replacing the function with acustom function. Accordingly, any function calls to Math.random( ) willexecute the custom function. In particular, the modified Javascriptincludes Javascript that defines the custom function, located at aposition in the Javascript prior to a position where it will be called.Here, the custom function, called RandomNew( ) generates the same randomnumber for the first 20 calls to that function. The line of Javascriptthat reads “Math.random=RandomNew” replaces, re-writes, re-defines, oroverwrites, as it were, the Math.random( ) function with the RandomNew() function. As a result, function calls in the Javascript toMath.random( ) will, upon execution of the modified Javascript, causethe RandomNew( ) function to be executed.

As described with respect to step S905, control module 260 sendscommunication 1005 comprising the modified Javascript, such that it isreceived by client proxy program 141. In accordance with communication1005, client proxy program 141 forms (i.e., generates) a HTTP response1006 to client browser 120's HTTP GET request 1000, and transmits HTTPresponse 1006 to client browser 120, similar to step S704.

In block 1007, client browser 120 processes the HTML within response1006 and executes the modified Javascript. Therefore, client browser 120executes the re-written Math.random( ) function (in place of theoriginal Math.random( ) function). As a result, where the unmodifiedJavascript when executed uses a first algorithm for random numbergeneration (i.e., that of the Math.random( ) function), the modifiedJavascript when executed uses a different algorithm (i.e., that of there-written Math.random( ) function).

FIGS. 11 and 13 illustrate the insert and search/replace method for theMath.random( ) function. As previously described with respect to stepsS900-S902, proxy server 250 receives communication 1001 from clientproxy program 141, sends HTTP GET request 1002 to the web server, andreceives from the web server HTTP response 1003. Javascript modifiermodule 262 then performs steps S903-S904, corresponding to block 1104 inFIG. 11. In this case, Javascript modifier module 262 inserts aRandomNew( ) function definition into the original Javascript code, at aposition prior to any call to the Math.random( ) function. Then,Javascript modifier module 262 locates code fragments which callMath.random( ) (i.e., searches in the Javascript for Javascript functioncalls to the Math.random( ) function) and replaces them with calls toRandomNew( ).

This Javascript code modification is depicted in FIG. 13. FIG. 13( a)shows original Javascript code which calls the Math.random( ) function,and FIG. 13( b) shows modified Javascript code which inserts theRandomNew( ) function and replaces original Math.random( ) calls withRandomNew( ) calls. Accordingly, any function calls to Math.random( )will be modified to function calls to RandomNew( ) Described in otherwords, at the top of the Javascript, a definition for RandomNew( ) notpresent in the original Javascript has been inserted, and the lineRandNum=Math.random( ) from the original Javascript has been changed toRandNum=RandomNew( ) in the modified Javascript. When this line isexecuted by client browser 120 or virtual browser 270, the RandomNew( )function will be called instead of the Math.random( ) function. In otherwords, an algorithm used by the original Javascript for random numbergeneration is replaced by a different algorithm.

As described with respect to step S905, control module 260 sendscommunication 1105 comprising the modified Javascript, such that it isreceived by client proxy program 141. In response to communication 1105,client proxy program 141 forms (i.e., generates) a HTTP response 1106 toHTTP GET request 1000, and transmits HTTP response 1106 to clientbrowser 120, similar to step S704.

In block 1107, client browser 120 processes the HTML within HTTPresponse 1106 and executes the modified Javascript. Therefore, clientbrowser 120 executes the inserted RandomNew( ) function instead of theMath.random( ) function.

As seen in FIGS. 12 and 13, the custom function is executed instead ofthe original random number function in Javascript. In doing so, thecustom function ensures that at least a first number of calls to thefunction will return a predictable value instead of a randomly generatedvalue.

In the preferred embodiment, the first twenty executions of the customfunction return the same predictable value. Also in the preferredembodiment, both client browser 120 and virtual browser 270 execute thesame custom function, so both browsers will return the same predictablevalue. Thus, any requests for URL which are dependent on the returnedvalue of the built-in random number function will be identical on bothclient browser 120 and virtual browser 270 (i.e., the requested URLswill be the same and thus, for example, the same advertising image willbe obtained).

However, one of ordinary skill in the art will appreciate that anyfunction or object which enables the URL requests to return identicalcontent can be used as a replacement. For instance, the executedfunction or returned results can even be different between clientbrowser 120 and virtual browser 270, as long as the returned resultscoordinate with each other. An example of when the returned resultscoordinate with each other is when the same advertising image isobtained. Notably, even though the built-in Javascript Math.random( )construct is a function, it can be appreciated that such function couldbe replaced with an object or any other appropriate programmingconstruct type.

Ultimately, any custom function, object, or other programming constructwhich enables pre-fetched data from these URL requests to be used inclient browser 120 can be incorporated into this feature of the presentinvention.

(b) Date Object

FIG. 14 illustrates the re-write method for the Date object. Aspreviously described with respect to steps S900-S902, proxy server 250receives communication 1001 from client proxy program 141, sends HTTPGET request 1002 to the web server, and receives from the web serverHTTP response 1003. Javascript modifier module 262 then performs stepsS903-S904, corresponding to block 1404 in FIG. 14. In this case,Javascript modifier module 262 re-defines the Date object.

As described with respect to step S905, control module 260 sendscommunication 1405 comprising the modified Javascript, such that it isreceived by client proxy program 141. In accordance with communication1405, client proxy program 141 generates a HTTP response 1406 to HTTPGET request 1000, and transmits HTTP response 1406 to client browser120, similar to step S704.

In block 1407, client browser 120 processes the HTML within HTTPresponse 1406 and executes the modified Javascript. Therefore, clientbrowser 120 creates a custom default constructor as the Date object, andreferences the custom default constructor by referencing the Dateobject. In other words, where the original Javascript when executed usesa first algorithm that returns a chronological measurement (e.g., thedate object), the modified Javascript when executed uses a differentalgorithm.

FIG. 15 illustrates the insert and search/replace method for the Dateobject. As previously described with respect to steps S900-S902, proxyserver 250 receives communication 1001 from client proxy program 141,sends HTTP GET request 1002 to the web server, and receives from the webserver HTTP response 1003. Javascript modifier module 262 then performssteps S903-S904, corresponding to block 1504 in FIG. 15. In this case,Javascript modifier module 262 inserts a definition for a DateNewfunction to the original Javascript code. Then, Javascript modifiermodule 262 locates code fragments which reference the Date object'sdefault constructor and replaces them with references to the DateNewfunction (i.e., search and replace).

As described with respect to step S905, control module 260 sendscommunication 1505 comprising the modified Javascript, such that it isreceived by client proxy program 141. In response to communication 1505,client proxy program 141 (i.e., generates) forms a HTTP response 1506 toHTTP GET request 1000, and transmits HTTP response 1506 to clientbrowser 120, similar to step S704.

In block 1507, client browser 120 processes the HTML within HTTPresponse 1506 and executes the modified Javascript. Therefore, clientbrowser 120 defines a DateNew function and refers to it instead of theDate object's default constructor. Again, where the original Javascript,when executed, uses an algorithm that returns a chronological measure(e.g., the Date object), the modified Javascript, when executed, uses adifferent algorithm.

In both approaches for modifying the Javascript, the custom datefunction/object/default-constructor replaces the original Date object inJavascript. By doing so, the custom function/object/default-constructorensures that a date value returned when executed by client browser 120will match the value returned when executed by virtual browser 270, evenif clocks of client PC 110 and proxy server 250 are not perfectlysynchronized or different time zones are used.

In the preferred embodiment, the replacement customfunction/object/default-constructor retrieves the current date and time,but modifies at least one field of the date/time value, such that thedate/time values between execution by client browser 120 and by virtualbrowser 270 are identical. In the preferred embodiment, the replacementfunction/object/default-constructor takes the current date/time androunds the minutes field of the value down to a three-minute interval.Additionally, the replacement function/object/default-constructor setsthe seconds and milliseconds fields of the date/time value to fixednon-zero values.

For instance, a date/time value with a time of “10:55:32 and 333millisecs” would be rounded down to “10:54:01 and 19 millisecs”, and adate/time value with a time of “10:57:10 and 425 millisecs” would berounded down to “10:57:01 and 19 millisecs”. That is, the minutes fieldis rounded down to the nearest three-minute interval, the seconds fieldis set to “01”, and the milliseconds field is set to “19”.

Thus, as with the random number function modification feature, anyrequest for a URL which is dependent on a date/time value will beidentical on both client browser 120 and virtual browser 270.Additionally, control module 260 controls virtual browser 270 such thatthe date/time values are identical, even when proxy server 250 andclient sub-system 100 are located in different timezones. Control module260 may accomplish this by, for example, retrieving the timezoneinformation of client browser 120, as discussed in greater detail below.Then, control module 260 can set virtual browser 270 to the sametimezone. Or, a date/time value can be calculated according to apre-determined timezone offset between client browser 120 and virtualbrowser 270. Alternatively, the date/time value could also be generatedaccording to a pre-defined timezone (e.g., GMT) on both client browser120 and virtual browser 270. In the end, since the date/time values areidentical, URLs generated using the date/time values will also beidentical, and therefore the images obtained from those URLs can also beidentical.

However, one of ordinary skill in the art will appreciate that anyfunction or object which enables the URL requests to return identicalcontent can be used as a replacement. For instance, the customfunctions/objects/default-constructors or returned results can even bedifferent between client browser 120 and virtual browser 270, as long asthe returned date/time results coordinate with each other. An example ofwhen the returned results coordinate with each other is when the sameadvertising image is obtained. Notably, even though the built-inJavascript Date construct is an object, it can be appreciated that suchobject could be replaced with a function or any other appropriateprogramming construct type.

Ultimately, any custom object, function, or other programming constructwhich enables pre-fetched data from these URL requests to be used inclient browser 120 can be incorporated into this feature of the presentinvention.

This feature of the present invention is also not limited to theaforementioned built-in Javascript random number function and date/timeobject. This feature can be extended or applied to any function, object,or other programming construct which benefits from modification and/orreplacement.

(4) Browser Specifics Feature

Another feature of the present invention relates to the capture ofbrowser specific information of the client browser. This feature ensuresthat characteristics of virtual browser 270 match that of client browser120, so that URLs that are requested by client browser 120 uponexecution of Javascript match the URLs that virtual browser 270requests, in the case that the URLs depend upon browser-specificinformation.

In certain circumstances, Javascript creates URLs that depend on theindividual browser specific information. This information may include,by way example and not of limitation, characteristics of a browser suchas the height or width of the browser (i.e., a window of the browser),the maximum height or width of the browser (i.e., a window of thebrowser), a color depth, a pixel depth, a timezone, a Java-enabled queryresult, a browser history characteristic of a web browser, a browseridentity, a browser version, a browser compatibility, installed browserplugins, other window geometry, etc.

For instance, a web page may contain Javascript which determines thebrowser window height and width and decides whether to request a largehigh-resolution version of an image or alternatively, a smallerlow-resolution version. If the web page is being loaded on a client PCis a netbook or other device having a small screen, then thelow-resolution version may be preferred. On the other hand, if the webpage is being loaded on a desktop with a large monitor, then thehigh-resolution version is preferred.

Also, a web page may contain Javascript which determines whether thebrowser has a Adobe Flash plugin installed. If the Flash plugin isinstalled, Flash-enabled content may be preferred. On the other hand, ifthe Flash plugin is not installed, non-Flash-enabled content ispreferred.

Synchronization of specific information of client browser 120 withvirtual browser 270 is important in the present invention in order forthe Javascript executed between the two browsers to perform identically.For instance, if different URLs are formed by the executed Javascriptbetween client browser 120 and virtual browser 270, then the pre-fetchedcontent by virtual browser 270 is unsuitable for client browser 120, asthe URLs do not match. Accordingly, providing virtual browser 270 withthe browser specifics of client browser 120 ensures that the same URLsare created by executed Javascript in both virtual browser 270 andclient browser 120.

FIGS. 16 and 17 describe this browser specifics feature of the presentinvention. FIG. 16 illustrates the communications between the variouscomponents for this feature. FIG. 17 describes the operation of clientbrowser 120, client proxy program 141, and proxy server 250 intransferring client browser specifics information.

In step S1700, client browser 120 requests a URL, similar to step S700.Again, the request is usually by a user of client PC 110 requesting theURL.

In step S1701, client browser 120 forms a HTTP GET request 1600 for theURL and sends it (via a network connection) according to the networksettings in TCP/IP stack 121, similar to step S701.

In step S1702, client proxy program 141 intercepts request 1600 andrelays the request to ISP sub-system 200 as communication 1601, similarto step S702.

In step S1703, proxy server 250 forms its own HTTP GET request 1602 forthe same URL, similar to step S601.

In step S1704, proxy server 250 receives HTTP response 1603 (that wasgenerated and sent by the web server), similar to step S602.

In step S1705, proxy server 250 modifies Javascript in the HTML documentwithin HTTP response 1603, as seen in block 1604 in FIG. 16.Specifically, control module 260 instructs Javascript modifier module262 to insert Javascript code into the HTML document. The insertedJavascript code, when executed on a web browser, will extracts browserspecifics information from that browser. Again, this information mayinclude a height, a width, a maximum height or width, a color depth, apixel depth, a timezone, a Java-enabled query result, or a browserhistory characteristic of the web browser. However, the informationcould also include any other information regarding the web browser, itsunderlying device, or any other specific information.

Note that unlike many other instances in this description where bothproxy server 250 and client PC execute the same Javascript, here thereis no need for proxy server 250 to execute the inserted Javascript sinceit is intended for client browser 120. Thus, proxy server 250 mayignore, skip, or otherwise not execute the inserted Javascript.

In the preferred embodiment, the executed Javascript code, afterextracting the browser specific information, encodes the informationinto a specific URL. Thus, a web browser such as client browser 120,upon executing the Javascript, requests the specific URL.

In step S1706, control module 260 sends a communication 1605 containingHTML to client proxy program 141. However, instead of the HTMLcontaining the original Javascript, as in step S603, the HTML incommunication 1605 contains the modified Javascript.

In step S1707, client proxy program 141 receives communication 1605. Inaccordance therewith, client proxy program 141 forms a HTTP response1606 which contains the HTML document and transmits it to client browser120, similar to step S704. In this case though, the HTML documentincludes the modified Javascript.

In step S1708, client browser 120 processes the HTML document, includingexecuting the modified Javascript in the HTML document, as seen in block1607 in FIG. 16. The modified Javascript, when executed, accumulates thebrowser specific information.

The obtained information preferably includes information inside theJavascript Document Object Model (DOM) within client browser 120. Theinformation to be gathered may include:

Browser Specific Information Javascript variable/property Screen heightwindow.screen.availHeight Screen width window.screen.availWidth Browserwindow height window.innerHeight Browser window width window.innerWidthBrowser has Java enabled? window.navigator.javaEnabled( ) Color depthwindow.screen.colorDepth Pixel depth window.screen.pixelDepth TimezoneDate( ).getTimezoneOffset( ) Length of browser historywindow.history.lengthHowever, the foregoing list is non-inclusive, and any other informationcan be included.

Further in step S1708, the modified Javascript, upon accumulating thisinformation, forms a URL having the information embedded within. Forexample, the modified Javascript may concatenate the results into astring and append the string to a URL to be retrieved from apredetermined and unique hostname. An example of a URL to be requestedmight be“http://www.forstatspurposesonly.com/browserspecifics-availWidth1024-availHeight768”.As can be seen, this URL communicates an available width and height of1024×768. Client browser 120 also requests the URL using a HTTP GETrequest 1608. Since TCP/IP stack 121 is configured to route Internetcommunications through router 130, request 1608 is received by router130.

For simplicity, only the browser width and height is shown in FIG. 16.As seen in FIG. 16, client browser 120 executes the modified Javascriptand as a result determines that the browser width is 800 pixels and thebrowser height is 600 pixels. The modified Javascript is furtherconfigured to form a URL with a particular host (e.g., IP address1.1.1.1 in FIG. 16). The modified Javascript then appends theinformation as the path for the URL such that the information can beeasily decoded from the URL. In FIG. 16, this is accomplished using thepath “/800-600.html” (i.e., the URL contains the width and height andthus is a function of window geometry). However, one of ordinary skillin the art would understand that any other construction of URLs couldalso be applied.

In step S1709, client proxy program 141 intercepts HTTP GET request1608. Client proxy program 141 recognizes from the format of the URLwithin request 1608 that the URL corresponds to client browser specificinformation. Client proxy program 141 extracts the client browserspecific information from the URL.

Note that client proxy program 141 preferably does not send the HTTP GETrequest 1608 to the Internet since there is no need to do so; indeed,the host name in the request could even be fictitious because the HTTPGET request is merely a vehicle to communicate the browser specificinformation to client proxy program 141. However, in the preferredembodiment, client proxy program 141 returns a HTTP response (e.g., 404not found error) to this HTTP GET request to client browser 120, so thatthis request does not remain pending in client browser 120.

In step S1710, client proxy program 141 sends the client browserspecific information, in communication 1609, to proxy server 250. Aspreviously noted, the preferred embodiment preferably utilizes aproprietary network protocol format, but any format capable ofeffectively transmitting the information can be used.

In the preferred embodiment, the specific information is sent only if itis new or has been modified. If the specific information matches that ofthe previously-sent information, re-sending of this identicalinformation is not required and is thus not performed. However, thespecific information may alternatively be sent to proxy server 250 inevery instance.

In step S1711, proxy server 250 receives communication 1609. Uponreceiving communication 1609, control module 260 stores the clientbrowser specific information, as seen in block 1610 in FIG. 16. Controlmodule 260 then ensures that any further Javascript executed by virtualbrowser 270 which retrieves or otherwise uses browser specificinformation returns (i.e., uses) the stored browser specific informationof client browser 120.

Control module 260 may accomplish this in one of numerous ways. In oneapproach, control module 260 may configure Javascript modifier module262 to insert Javascript into future received HTML documents for virtualbrowser 270, whereby the inserted Javascript overwrites virtualbrowser's 270 browser specific information.

As another approach, control module 260 may configure Javascriptmodifier module 262 to modify the original Javascript so that allreferences to function calls to browser specific information are changedto the static value of the stored client browser specific information.For instance, if the stored client browser screen height value is 600,Javascript modifier module 262 replaces the Javascript code“x=window.screen.availHeight” with “x=600”.

Accordingly, in step S1712, when virtual browser 270 later receives anHTML document for processing for virtual display, any URLs generatedfrom Javascript execution, which are dependent on browser specificsinformation, will match URLs generated when client browser 120 alsoexecutes the Javascript.

Instead of encoding the client browser specific information in a URLassociated with a HTTP GET request, the modified Javascript mayalternatively encode the information using another format. For example,the modified Javascript may place the client browser specificinformation within a HTTP PUT request, a HTTP POST request, or a cookie.Like the URL method, client browser 120 transmits the request or cookie(e.g., via HTTP), which is then intercepted by client proxy program 141.

As another alternative, proxy server 250, instead of client proxyprogram 141, may perform the interception and decoding of communicationscontaining embedded client browser specific information.

In the end, any particular technique for conveying client browserspecific information may be employed as long as it is ultimatelyreceived by proxy server 250.

(5) Cookie Tracking Feature

Another feature of the present invention relates to the synchronizationof cookies between client sub-system 100 and ISP sub-system 200. Thisfeature allows a close representation of client browser's 120 cookies tobe replicated in virtual browser 270. Using this feature, any URLs whichdepend on client browser's 120 stored cookies are accurately replicatedin virtual browser 270.

FIGS. 18 through 21 describe this cookie tracking feature of the presentinvention. FIG. 18 illustrates the communications between the variouscomponents for this feature. FIG. 19 describes the operation of clientproxy program 141 and proxy server 250 for this feature, when clientproxy program 141 does not contain promised or pre-fetched data. FIG. 20describes the operation of proxy server 250 when it receives a HTTPrequest from virtual browser 270. FIG. 21 describes the operation ofclient proxy program 141 and proxy server 250 for this feature, whenclient proxy program 141 contains promised or pre-fetched data.

This feature is accomplished by client proxy program 141 and/or proxyserver 250 inspecting all HTTP GET requests from client browser 120 andall HTTP responses to client browser 120. In the inspection process,client proxy program 141 and/or proxy server 250 monitor the “COOKIE”fields of HTTP GET requests, and monitor the “SET-COOKIE” fields of HTTPresponses. In the preferred embodiment, client proxy program 141performs the inspection and monitoring steps, and sends any updatedconclusions about cookies to proxy server 250 to update the contentswithin cookie tracker module 261.

The cookie tracking feature of the present invention will next bedescribed with respect to the steps of FIG. 19 in relation to thecommunications and processes depicted in FIG. 18. In FIG. 18,communications 1800, 1802-1805, 1807-1809, 1811-1815 and 1817, andblocks 1801 and 1806 demonstrate an instance when client browser 120does not have an existing cookie for the URL, but where a new cookie isattached to the HTTP response. Communications 1811-1815 and 1817, andblocks 1810 and 1816 demonstrate an instance where client browser 120has an existing cookie and attaches it to a HTTP GET request.

The instance when client browser 120 does not have an existing cookiefor the URL will first be discussed, with references to communications1800, 1802-1805, 1807-1809, 1811-1815 and 1817, and blocks 1801 and 1806in FIG. 18.

In step S1900, client browser 120 requests a URL, similar to step S700.Again, the request is usually by a user of client PC 110 requesting theURL.

In step S1901, client browser 120 forms a HTTP GET request 1800 for theURL and sends it (via a network connection) according to the networksettings in TCP/IP stack 121, similar to step S701. Client browser 120does not hold an existing cookie for webserver1.com, so request 1800does not contain a COOKIE field.

In step S1902, client proxy program 141 intercepts request 1800. Clientproxy program 141 checks request 1800 to determine if the requestcontains a COOKIE field, and compares it against existing conclusions ithas previously made regarding the cookies stored within client browser120. The cookie conclusions are data relating to cookies believed to bestored within client browser 120. The conclusions may includeinformation on whether a cookie exists, whether a cookie has beendeleted, an expiration date and time of a cookie, the domain of thecookie, the path of the cookie, or any other cookie attribute.Conclusions about a cookie may involve a level of speculation onattributes of the cookie. For instance, if a previously unknown cookieis discovered and the domain and path of the cookie cannot be directlyascertained, client proxy program 141 may presume that the domain is thebroad domain of the hostname, and that the path is the universal path(“/”).

In step S1903, client proxy program 141 determines whether its existingconclusion about one or more cookies believed to be stored within clientbrowser 120 has been changed, based on request 1800. Referring to FIG.18, client proxy program 141 does not modify its cookie conclusions forwebserver1.com. Steps S1902 and S1903 are collectively depicted as block1801 in FIG. 18 for the instance of webserver1.com.

In step S1904, client proxy program 141 sends a communication containingupdated conclusions about stored cookies to proxy server 250, if anupdated conclusion is decided. In the instance of webserver1.com, noconclusion was updated, so no communication is sent.

In step S1905, proxy server 250 receives the updated cookie conclusions,if sent by client proxy program 141 in step S1904, and stores theupdated cookie information in cookie tracker module 261.

In step S1906, client proxy program 141 relays request 1800 to ISPsub-system 200 as communication 1802.

In step S1907, proxy server 250 forms (i.e., generates) its own HTTP GETrequest 1803 for the same URL as HTTP GET request 1800, similar to stepS601.

In step S1908, proxy server 250 receives HTTP response 1804 from the webserver, similar to step S602. In this case, response 1803 contains aSET-COOKIE field with cookie information.

In step S1909, proxy server 250 sends a communication 1805 including thecontents of HTTP response 1804 to client proxy program 141.

In step S1910, client proxy program 141 checks the contents of HTTPresponse within communication 1805 to determine if the response containsa SET-COOKIE field, and compares it against existing conclusions it haspreviously made regarding the cookies stored within client browser 120,in a similar manner to step S1902.

In step S1911, client proxy program 141 determines whether its existingconclusion about one or more cookies believed to be stored within clientbrowser 120 or to be imminently stored within client browser 120 will bechanged, based on HTTP response 1804, in a similar manner to step S1903.This may commonly occur if the HTTP response contains a SET-COOKIEfield, as seen HTTP response 1804 in FIG. 18. Referring to FIG. 18,client proxy program 141 modifies its cookie conclusions forwebserver1.com, based on the HTTP responses. Steps S1910 and S1911 arecollectively depicted as block 1806 in FIG. 18 for the instance ofwebserver1.com.

In step S1912, client proxy program 141 sends a communication containingupdated conclusions about stored cookies to proxy server 250, as seen incommunication 1808 for webserver1.com.

In step S1913, proxy server 250 receives the updated cookie conclusions,if sent by client proxy program 141 in step S1912, and stores theupdated cookie information in cookie tracker module 261.

In step S1914, client proxy program 141 forms a HTTP response 1807 whichcontains the HTML document from the HTTP response 1804 and forwards theHTTP response 1807 to client browser 120, similar to step S704.

The instance when client browser 120 has an existing cookie for the URLwill next be discussed, with references to communications 1811-1815 and1817, and blocks 1810 and 1816 in FIG. 18.

In step S1900, client browser 120 requests a URL, similar to step S700.Again, the request is usually by a user of client PC 110 requesting theURL.

In step S1901, client browser 120 forms a HTTP GET request 1809 for theURL and sends it (via a network connection) according to the networksettings in TCP/IP stack 121, similar to step S701. Client browser 120holds an existing cookie for webserver2.com, so request 1809 contains aCOOKIE field.

In step S1902, client proxy program 141 intercepts request 1809. Clientproxy program 141 checks request 1809 to determine if the requestcontains a COOKIE field, and compares it against existing conclusions ithas previously made regarding the cookies stored within client browser120. The cookie conclusions are data relating to cookies believed to bestored within client browser 120. The conclusions may includeinformation on whether a cookie exists, whether a cookie has beendeleted, an expiration date and time of a cookie, the domain of thecookie, the path of the cookie, or any other cookie attribute.Conclusions about a cookie may involve a level of speculation onattributes of the cookie. For instance, if a previously unknown cookieis discovered and the domain and path of the cookie cannot be directlyascertained, client proxy program 141 may presume that the domain is thebroad domain of the hostname, and that the path is the universal path(“/”).

In step S1903, client proxy program 141 determines whether its existingconclusion about one or more cookies believed to be stored within clientbrowser 120 has been changed, based on request 1809. This may commonlyoccur if request 1809 contains a COOKIE field that holds a new cookiepreviously unknown to client proxy program 141, as seen in request 1809.Referring to FIG. 18, client proxy program 141 modifies its cookieconclusions for webserver2.com, based on the HTTP GET requests. StepsS1902 and S1903 are collectively depicted as blocks 1810 in FIG. 18 forthe instance of webserver2.com.

In step S1904, client proxy program 141 sends a communication containingupdated conclusions about stored cookies to proxy server 250, as seen incommunication 1811 for webserver2.com.

In step S1905, proxy server 250 receives the updated cookie conclusions,if sent by client proxy program 141 in step S1904, and stores theupdated cookie information in cookie tracker module 261.

In step S1906, client proxy program 141 relays request 1809 to ISPsub-system 200 as communication 1812.

In step S1907, proxy server 250 forms (i.e., generates) its own HTTP GETrequest 1813 for the same URL as HTTP GET request 1809, similar to stepS601.

In step S1908, proxy server 250 receives HTTP response 1814 from the webserver, similar to step S602. In this case, response 1814 does notcontain a SET-COOKIE field with cookie information.

In step S1909, proxy server 250 sends a communication 1815 including thecontents of HTTP response 1814 to client proxy program 141.

In step S1910, client proxy program 141 checks the contents of HTTPresponse within communication 1815 to determine if the response containsa SET-COOKIE field, and compares it against existing conclusions it haspreviously made regarding the cookies stored within client browser 120,in a similar manner to step S1902.

In step S1911, client proxy program 141 determines whether its existingconclusion about one or more cookies believed to be stored within clientbrowser 120 or to be imminently stored within client browser 120 will bechanged, based on HTTP response 1814, in a similar manner to step S1903.This may commonly occur if the HTTP response contains a SET-COOKIEfield. Referring to FIG. 18, client proxy program 141 does not modifyits cookie conclusions for webserver2.com. Steps S1910 and S1911 arecollectively depicted as block 1806 in FIG. 18 in the instance ofwebserver2.com.

In step S1912, client proxy program 141 sends a communication containingupdated conclusions about stored cookies to proxy server 250, if anupdated conclusion is decided. In the instance of webserver2.com, noconclusion was updated, so no communication is sent.

In step S1913, proxy server 250 receives the updated cookie conclusions,if sent by client proxy program 141 in step S1912, and stores theupdated cookie information in cookie tracker module 261.

In step S1914, client proxy program 141 forms a HTTP response 1817 whichcontains the HTML document from the HTTP response 1814 and forwards theHTTP response 1817 to client browser 120, similar to step S704.

The operation of proxy server 250 will now be described with respect toFIG. 20. The steps in FIG. 20 depict the pre-fetching operation of thepresent invention, when utilizing the cookie tracking feature of thepresent invention. These steps are executed as the pre-fetchingoperation is initiated and virtual browser 270 generates a request foran additional URL for pre-fetching.

In Step S2000, virtual browser 270, while processing an HTML documentfor a URL, produces a request for an additional URL, and thus forms aHTTP GET request for the additional URL.

In step S2001, control module 260 intercepts the request for theadditional URL.

In step S2002, control module 260 analyzes the cookie information withinthe HTTP GET request. Control module 260 accesses the stored cookieswithin cookie tracker module 261 to determine whether the HTTP GETrequest would contain a cookie field if it were sent by client browser120. If control module 260 determines that a cookie would have beenattached to the request if sent by client browser 120, it updates thecookie information within the HTTP GET request with the cookieinformation stored in the cookie tracker module 261. In the preferredembodiment, control module 260 modifies only the first HTTP GET requestfor a specific host within a web page to be loaded. Since cookies may befurther modified with SET-COOKIE fields within the web page or withJavascript execution, the modification of only the first HTTP GETrequest for a specific host ensures that the further cookiemodifications within the web page are properly executed.

In step S2003, control module 260 sends the updated HTTP GET request,which contains the updated cookies, to the appropriate web server,similar to step S605.

In step S2004, control module 260 sends a pre-fetch notification(“promise”) to client proxy program 141, informing client proxy program141 that proxy server 250 has started the process of pre-fetchingcontent for the additional URL. This step is similar to step S606.

In step S2005, control module 260 receives the HTTP response to theupdated HTTP GET request, similar to step S607.

In step S2006, control module 260 modifies the HTTP response to producea modified HTTP response that is forwarded to virtual browser 270. Themodified HTTP response contains a SET-COOKIE field, which will updateand correct any inconsistencies of stored cookies within cookie storagemodule 271 of virtual browser 270. For instance, if a cookie should beadded to cookie storage module 271 within virtual browser 270, aSET-COOKIE field will be added which contains such cookie information.On the other hand, if a cookie is to be deleted within virtual browser270, a SET-COOKIE field with already-expired expiration attributes isadded to the HTTP response. In the preferred embodiment, control module260 modifies only the first HTTP response for a specific host within aweb page to be loaded. Since cookies may be further modified withSET-COOKIE fields within the web page or with Javascript execution, themodification of only the first HTTP response for a specific host ensuresthat the further cookie modifications within the web page are properlyexecuted.

In step S2007, control module 260 forwards the modified HTTP response tovirtual browser 270 such that virtual browser 270 can process theinformation within as if for virtual display.

In step S2008, control module 260 forwards the original, unmodified HTTPresponse to client proxy program 141. Since the objective is for proxyserver 250 to replicate the cookies within client browser 120, thecookies are already stored within client browser 120. Accordingly, nocookie modification is required for client browser 120.

By performing these steps of FIG. 20, control module 260 correctsinconsistencies within virtual browser 270 relating to its cookiestorage module 271 so that the cookie storage module 271 in virtualbrowser 270 is maintained as close as possible to the cookies withinclient browser 120.

The operation of the cookie tracking feature of the present invention,in an instance when client proxy program 141 contains promised orpre-fetched data, will now be described with respect to FIG. 21.

In step S2100, client browser 120 forms a HTTP GET request for anadditional URL, similar to step S706. The additional URL corresponds toadditional content required for displaying the desired web page inclient browser 120.

In step S2101, client browser 120 forwards the HTTP GET request toclient proxy program 141, similar to step S707.

In step S2102, client proxy program 141 checks whether the URLcorresponds to promised or pre-fetched data, similar to step S711. Ifthe URL does not correspond to such data, client proxy program 141proceeds as if no pre-fetched data exists or is forthcoming, using thesteps of FIG. 19. That is, client proxy program 141 treats the HTTP GETrequest as if it were a new, separate URL. If the URL corresponds topromised or pre-fetched data, client proxy program 141 proceeds to stepS2103, after promised data has been received as pre-fetched data.

In step S2103, client proxy program 141 compares any cookies in the HTTPGET request for the additional URL with cookies that were used by proxyserver 250 to obtain the pre-fetched data. This cookie information ispreferably attached with the pre-fetched data as the data is sent byproxy server 250 to client proxy program 141.

In step S2104, client proxy program 141 checks whether the cookies matchbetween the HTTP GET request and the cookies used for pre-fetching. Acookie match indicates that the pre-fetched data is identical to datathat would be returned if client browser 120 had made the requestdirectly to the web server. In the preferred embodiment, a match issatisfied when the cookies in the HTTP GET request are a subset of thecookies used for pre-fetching, and that the values of the cookies in theHTTP GET request match the values of the cookies used for pre-fetching.However, a match is acceptable even if additional cookies or valueswithin the pre-fetching set of cookies are present. That is, the cookiesmatch even if the cookies used for pre-fetching contain additionalinformation (e.g., additional cookies or fields) not present in thecookies in the HTTP GET request.

In other words, a match is acceptable even if additional cookies withinthe prefetching set of cookies are present. In this context additionalcookies means additional names where a cookie is a name/value pair. Thatis, the cookies match even if the cookies used for prefetching containadditional cookies (name/value pairs) provided that the prefetch requesthad the same name/value pairs for each of the client browser's cookiename/value pairs. For example, assume that the client proxy receives aprefetched image along with three cookies. If an HTTP GET requestgenerated by the client apparatus's web browser has two cookies whosename/value pairs match two of those three cookies, then the client proxyconcludes that a match is present and that the prefetched image isusable to fulfill the HTTP GET request.

If the cookies do not match, the pre-fetched data may not correspond tothe actual data that would be returned. Accordingly, client proxyprogram 141 cannot rely on the pre-fetched data, and thus proceeds as ifno pre-fetched data exists, according to the steps of FIG. 19.

If the cookies match, client proxy program 141 proceeds to step S2105.

In step S2105, client proxy program 141 checks the contents of thepre-fetched data to determine if the response contains a SET-COOKIEfield, and compares it against existing conclusions it has previouslymade regarding the cookies stored within client browser 120, similar tostep S1910.

In step S2106, client proxy program 141 determines whether its existingconclusion about one or more cookies believed to be stored within clientbrowser 120 or will be imminently stored within client browser 120 willbe changed, based on the pre-fetched data, similar to step S1911.

If a conclusion has changed, then client proxy program 141 proceeds tostep S2107, which sends the updated conclusion to proxy server 250,similar to step S1912.

In step S2108, proxy server 250 receives the updated cookie conclusionsand stores the updated cookie information in cookie tracker module 261.

In step S2109, client proxy program 141 forwards the pre-fetched data toclient browser 120 as a HTTP response, similar to step S712. As such,client browser 120 receives the accurate content corresponding to theadditional URL.

As seen in FIGS. 18-21, this cookie tracking feature allows virtualbrowser 270 to access equivalent cookies as client browser 120, therebyallowing more pre-fetched content from the pre-fetch operation of proxyserver 250 to be matched, and thus suitably provided to client browser120.

While the above preferred embodiment uses client proxy program 141 totrack cookies, it can also be appreciated that proxy server 250 alone ora combination of client proxy program 141 and proxy server 250 can beused to implement this feature of the present invention.

Preferably, both client proxy program 141 and control module 260 performcookie tracking.

More detail about the above-discussed cookie tracking carried out by thepreferred embodiment will now be discussed. A cookie, as far as cookietracking purposes is concerned, has the following attributes: (1) Name—astring; (2) Value—a string; (3) Domain—e.g. “.google.com”; (4) Path—afile path, e.g. “/” or “/downloads/recent”; and (5) Expiration—a dateand time (or on session end).

A cookie can be placed into a browser via: (1) HTTP response headerSET-COOKIE field—this provides all of the above attributes; (2)Javascript—this provides all of the above attributes, but cannot beobserved by watching network activity; or (3) via either of the abovemechanisms at a time when the browser's networking activity cannot beobserved (e.g. when a laptop is moved and accesses the Internet via someother network).

A cookie appears in an HTTP request header's COOKIE field, but only theName and Value attributes appear. The Domain, Path and Expiration cannotbe directly determined from the HTTP request header's COOKIE field.

A cookie may be removed from a browser via: (1) HTTP response headerSET-COOKIE field with an already expired expiration attribute; (2)Javascript; (3) the browser user explicitly commanding the browser todelete one or more cookies; or (4) the browser being restarted (whichremoves all cookies with a session end expiration attribute).

Cookie tracking involves observing all HTTP transactions (HTTP requestheaders and HTTP response headers) coming from a browser. The output ofcookie tracking is the estimate of each tracked cookie's attributes. Anoutput is provided when a given cookie is first found to exist, when agiven cookie has been determined to be deleted and when the estimatedvalue of one or more attributes has changed. The name and the value aretypically known exactly. The domain, path and expiration are justestimated by cookie tracking when a cookie has only been observed inHTTP request header COOKIE fields, not in an HTTP response SET-COOKIEfield.

Cookie tracking makes the usually valid assumption that a cookie isuniquely identified by name and by the overall domain (e.g. .google.com)with which it is associated.

Cookie tracking of HTTP response headers involves merely scanning forSET-COOKIE fields. When such a field is found, the expiration attributeis examined. The cookie is deleted (if present in the tracker'sdatabase) when the SET-COOKIE expiration attribute is already expired.Otherwise, the cookie is created within the tracker's data base withconfirmed attribute settings if it is not already present. The cookie isupdated with the SET-COOKIE attributes and with each attribute having aconfirmed status when the cookie is already present in the cookietracking database.

Cookie tracking of HTTP request headers involves discovering new cookiesand placing them in the cookie tracker's database, refining theestimated attributes of cookies already in the cookie tracker's databaseand when appropriate deleting cookies already in the cookie tracker'sdatabase.

Every HTTP request header's cookie field is examined by the CookieTracker. The domain is determined from the HTTP request's hostname field(e.g. the domain for news.google.com is .google.com). If a new cookie isdiscovered (a unique cookie name/domain value), it is placed into thedatabase with unconfirmed domain, path and expiration fields.

A database entry maintains the set of all hostnames that have beenobserved to have the cookie. This is used to refine the domainattribute.

A database entry also maintains the set of all paths that have beenobserved to have the cookie. This is used to refine the path attribute.

The initial estimate of the domain is the broadest possibleinterpretation (e.g. .google.com which matches all Google web sites, not.mail.google.com). The initial estimate of the path is the broadestpossible interpretation (i.e. “/” or every path within the server. Theinitial estimated value of a discovered cookie's expiration is “neverexpire”. The expiration estimated value is only updated when aSET-COOKIE for the cookie is later observed.

If an existing cookie is seen in a HTTP request it is used to refine thecookies estimated domain and path. If the hostname for the HTTP requestis different from the hostname from the original discovery (e.g.news.google.com rather than www.google.com) this confirms that thedomain is the whole domain (e.g. .google.com). The cookie's domainattribute is updated to a “confirmed” status.

If a cookie's domain has a confirmed status or the HTTP request is arequest for the same hostname as when the cookie was discovered, thecookie's path is scrutinized next. The set of all paths seen to have thecookie is compared and the longest common path is calculated. Thelongest common path is maintained in the cookie's database entry. E.g.,if the cookies was seen in /downloads/recent and /downloads/ancient thenthe longest common path is /downloads.

If an existing cookie is found to not be present in an HTTP request to ahostname which is known to match the cookie (e.g. the original hostnamefor an unconfirmed domain or the whole domain for a confirmed domain),then path may be refined or the cookie may be determined to have beendeleted. The cookie is determined to have been deleted when: (1) thecookie has an unconfirmed path attribute and the HTTP request's pathfalls within the longest common path (e.g. the path is/downloads/favorites and the longest common path is /downloads); or (2)the cookie has a confirmed path attribute (from an HTTP responseSET-COOKIE field) and the HTTP request's path field falls within theconfirmed path.

In either case, the cookie is determined to be deleted because it shouldhave been present if not already deleted.

An opportunity for refining the path estimate exists when: (1) anexisting cookie with an unconfirmed path attribute is found to not bepresent in an HTTP request whose hostname matches either the cookie'sconfirmed domain or the original hostname; and (2) the HTTP request'spath falls outside of the longest common path (e.g. the path is/uploads); and (3) the cookie does not appear in any of the HTTP requestheader's cookie fields.

The estimate for the cookie's path is updated to the first place theHTTP request's path differs from the longest common path. Following ourexample, the best estimate of the cookies path is moved from “/” to“/download”.

That is how cookie tracking works. In the preferred embodiment of thepresent invention (the preferred embodiment having a virtual prefetchbrowser): cookie tracking is performed in the client proxy to track theend-user browser's cookies and also by the proxy server's control module(program) to track the virtual browser's cookies.

Also, as explained above, in the preferred embodiment, there iscommunication between the client proxy and the proxy server's controlmodule to communicate updated cookie conclusions. In particular, acookie tracker (such as the client proxy) provides an output wheneverthe estimate of a tracked cookie's attribute changes. Such an outputincludes the affected cookie's estimated attributes: name, value,domain, path, expiration. This output is communicated to the proxyserver's control module which can use the output to update its cookietracking database.

The proxy server's control module carries out its cookie tracking as itmonitors the virtual browser's HTTP transactions. This is howdiscrepancies are discovered and fixed up (in modified virtual browserHTTP requests and by inserting SET-COOKIE fields into HTTP responses).In other words, the proxy server's control module can modify a virtualbrowser HTTP request by adding or changing a cookie in the request, inaccordance with the control module's cookie tracking database, and caninsert a SET-COOKIE field into a HTTP response to be provided by thecontrol module to the virtual browser, also in accordance with thecontrol module's cookie tracking database. For example, if the virtualbrowser generates an HTTP request, and the control module determinesbased on the cookie tracking database that the request is lacking acookie or that it contains an outdated cookie, then the control modulecan add or update the cookie, as the case may be, thereby forming amodified HTTP request. If the control module wishes to update thevirtual browser's stored cookies, then the control module may, forexample, use a SET-COOKIE field in a HTTP response to be provided by thecontrol module to the virtual browser so as to provide a cookiegenerated by the control module in accordance with the cookie trackingdatabase. As a result, the virtual browser stores the cookie in itscookie storage.

As can be seen from the foregoing, in the preferred embodiment, theclient proxy sends cookie conclusions via a network data communicationto the proxy server. These cookie conclusions, which are obtained by theclient proxy using the cookie tracking method discussed above, mayprovide the proxy server (which is also using the cookie tracking methodat its end) with an even better estimation of the status of cookiesactually stored by the client apparatus's web browser. This type ofcookie synchronization (or estimated cookie synchronization as it were)allows the proxy server, when pre-fetching content on behalf of that webbrowser, to use cookies as close as possible to those that the webbrowser would use.

Preferably, the cookie conclusions are sent from the client proxy to theproxy server separate and apart from cookie fields in an HTTP headerfrom the client apparatus's web browser (e.g., an HTTP request generatedby the client apparatus's web browser), and more preferably are sentseparate and apart from cookie fields in any HTTP header or informationin those cookie fields.

(6) Web Page Response Time Feature

A further feature of the present invention relates to the tracking ofthe time required for the client browser to fully load a web page. Thisfeature allows statistics to be accumulated to evaluate the performanceof the present invention and to adjust any system settings for optimaloperation.

FIGS. 22, 23, and 26 describe this web page response time feature of thepresent invention. FIG. 22 illustrates the communications between thevarious components for this feature. FIG. 23 describes the operation ofclient browser 120, client proxy program 141, and proxy server 250 forthis feature. FIG. 26( a) shows sample C# code that creates a Javascriptfragment for generating an HTTP request upon a page load event. FIG. 26(b) shows sample C# code which creates a Javascript fragment forgenerating a HTTP request when the end of the HTML has been parsed.

In step S2300, client browser 120 requests a URL, similar to step S700.Again, the request is usually by a user of client PC 110 requesting theURL.

In step S2301, client browser 120 forms a HTTP GET request 2200 for theURL and sends it (via a network connection) according to the networksettings in TCP/IP stack 121, similar to step S701.

In step S2302, client proxy program 141 intercepts request 2200. Clientproxy program 141 marks the time that it receives request 2200 as thebegin-time (“Time 1”). That is, the begin-time corresponds to the timethat client proxy program 141 receives the first HTTP request for a webpage.

In step S2303, client proxy program 141 relays request 2200 to ISPsub-system 200 as communication 2201, similar to step S702.

In step S2304, proxy server 250 forms its own HTTP GET request 2202 forthe same URL, similar to step S601.

In step S2305, proxy server 250 receives HTTP response 2203 from the webserver, similar to step S602.

In step S2306, proxy server 250 inserts Javascript in the HTML documentwithin HTTP response 2203, as seen in block 2204 in FIG. 22.Specifically, control module 260 instructs Javascript modifier module262 to insert Javascript code into the HTML document. The insertedJavascript code, when executed on a web browser, causes the web browserto perform an action such that ultimately, proxy server 250 receivesdata representing the web page response time. Sample code for insertingsuch Javascript is depicted in FIGS. 26( a) and 26(b). In the preferredembodiment, client proxy program 141 processes start and end times tocalculate the final web page response time, and sends the calculatedresponse time to proxy server 250. However, one of ordinary skill in theart will appreciate that proxy server 250, or a combination of clientproxy program 141 and proxy server 250, may perform such processing andcalculations.

In the preferred embodiment, two different time values are determined.However, one of ordinary skill in the art will appreciate that either ofthe two time values, or any other time value representing the end of theweb page loading process may be alternatively used.

As previously mentioned, the begin-time value is the time when clientproxy program 141 (and thus in the preferred embodiment, router 130)first receives HTTP request 2200. It can be appreciated that this timeis a close approximation to time when the client browser 120 transmitsHTTP request 2200. This is because network link 101 between client PC110 and router 130 is customarily a low-latency network, particularlywhen compared to the higher-latency satellite links 20 and 30.Therefore, in the preferred embodiment, the recorded begin-time is thepoint when client proxy program 141 receives the initial HTTP request.Alternatively, a different response time may be calculated, whereby apage start URL may be inserted into the beginning of the HTML document,such that the begin time is the time when client proxy program 141receives a HTTP GET request for the page start URL.

The first end-time value is the time when the web browser has finishedprocessing the HTML. This is accomplished by inserting additional firstJavascript code into the HTML document as close to the end of thedocument as possible. Preferably, the inserted Javascript is placedafter all other Javascript code and just before the </body> tag, ifthere are no scripts after the tag.

The second end-time value is the time when the web browser has finishedprocessing the entire page. This is accomplished by inserting additionalsecond Javascript code into the HTML document which registers an eventhandler for an end-of-page event. This customarily corresponds with the“on Load” event. When the web browser has determined that the web pagehas completed loading, the web browser will execute the Javascript eventhandler.

In the inserted Javascript for both time value determinations, theexecution of the Javascript requests a URL corresponding to the timevalue determination. The URL may contain a timestamp for the time value,or may simply be a specific URL recognizable by client proxy program 141or proxy server 250.

In step S2307, control module 260 sends a communication 2205 containingHTML to client proxy program 141. However, instead of the HTMLcontaining the original Javascript from HTTP response 2203, as in stepS603, the HTML in communication 2205 contains the modified Javascriptwith the inserted Javascript code.

In step S2308, client proxy program 141 receives communication 2205 andgenerates a HTTP response 2206 which contains the HTML document andtransmits it to client browser 120, similar to step S704. However, herethe HTML document includes the modified Javascript.

In step S2309, client browser 120 begins processes the HTML document,including executing the modified Javascript in the HTML document, asseen in block 2207 in FIG. 22.

In step S2310, client browser 120 reaches the end of the HTML document,where it encounters the first inserted Javascript code, as seen in block2208 in FIG. 22. Client browser 120 executes the first insertedJavascript code, which forms a specific URL. Client browser 120 requeststhis URL as a HTTP GET request 2209.

In step S2311, client proxy program 141 intercepts request 2209. Clientproxy program 141 recognizes the specific URL within request 2209 ascorresponding to the end of HTML in client browser 120 loading the webpage.

In step S2312, client proxy program 141 marks the time of receivingrequest 2209 (“Time 2”). Client proxy program 141 also returns a HTTPresponse 2210 of “404 Not-Found”, to provide client browser 120 aresponse to request 2209 and satisfy the request.

Meanwhile, in step S2313, client browser finally finishes processing theentire web page, and thus, triggers an end-of-page event, as seen inblock 2211 in FIG. 22. The event causes an event handler, defined in thesecond inserted Javascript code, to be executed. The event handler formsa second specific URL. Client browser 120 requests this second URL as aHTTP GET request 2212.

In step S2314, client proxy program 141 intercepts request 2212. Clientproxy program 141 recognizes the specific URL within request 2212 ascorresponding to the event handler being executed in client browser 120after the end-of-page event. If the URL does not contain timestampinformation, client proxy program 141 marks the time of receivingrequest 2212. Alternatively, if the text of the URL has embeddedtimestamp information, client proxy program 141 decodes and extractstimestamp information from the embedded timestamp information. Anexample of the URL having embedded time stamp information (i.e., the URLis a function of time and/or date) is the following:http://www.forresptimeonlypurposes.com/timestampdate20101111-timestamptime161200-timestampmicrosec=945679.

In step S2315, client proxy program 141 marks this end-of-page timingdata (“Time 3”). Client proxy program 141 also returns a HTTP response2213 of “404 Not-Found”, to provide client browser 120 a response torequest 2212 and satisfy the request.

In step S2316, client proxy program 141 uses the begin-time, theend-of-HTML time, and/or the end-of-page time to calculate the web pageresponse time for client browser 120. In the time calculations, clientproxy program 141 may discount any communications delay between clientbrowser 120 and client proxy program 141 as being negligible.Alternatively, the time can be compensated for this delay according toany appropriate and well-known method.

In step S2317, client proxy program 141 sends the web page responsetimes to proxy server 250 as communication 2214.

Instead of using a URL associated with a HTTP GET request, the modifiedJavascript may alternatively encode the timing information using anotherformat. For example, the modified Javascript may place the timinginformation within a HTTP PUT request, a HTTP POST request, or a cookie.Like the URL method, client browser 120 transmits the HTTP request orcookie (e.g., via HTTP), which is then intercepted by client proxyprogram 141.

As another alternative to the embodiment, proxy server 250 may performthe processing of the specific end-of-HTML and end-of-page URLs sent byclient browser 120 or the processing of the web page response times,instead of client proxy program 141 performing such processing.

Again, in this web page response scheme which uses Javascript injection,there is no need for proxy server 250 to execute the modified Javascript(since the modified Javascript is intended to be executed by clientbrowser 120), so proxy server 250 may skip or otherwise ignore or notexecute the modified Javascript when executing Javascript in a HTTPresponse.

Additional General Comments

The following numbered comments are applicable to all of the foregoingembodiments:

(1) In the foregoing description, where reference is made to a“program”, such refers to programming code or instructions includingwithout limitation object code, machine code, source code, scriptingcode, etc. which can be executed by a computer and more particularly bythe computer's processor or processing unit or CPU, etc. Thus, when itis stated that a “program” takes some action, it means that the programincludes programming code or instructions that when executed asdiscussed above effect that action.

(2) In the foregoing description, where reference is made to a link ornetwork link, such may also be referred to as a network connection.Sending data on a network connection by one apparatus for receipt byanother apparatus can cover the case where the apparatuses are connecteddirectly by a single link, or the case where the apparatuses areconnected indirectly with one or more links and/or one or moreapparatuses, routers, or other devices intervening therebetween.

(3) In the foregoing description, when it is described that the clientPC's web browser generates a HTTP GET request for a URL and sends theHTTP GET request on a network connection, it is understood that all ofthe various hardware and software components in between the web browserand the physical level are implicated. Thus, for example, when theclient PC's web browser 120 generates a HTTP GET request, the HTTP GETrequest is received and processed by TCP/IP stack 121 after which it issent using TCP/IP on network link 101. Likewise, when proxy server 250sends data to client proxy program 141, the data passes through NIC 253,NIC 220, satellite interface 210, link 30, satellite 10, link 20,satellite interface 131, and routing 140, before reaching client proxyprogram 141. In other words, where it is described that some type ofdata is sent from one apparatus to another, the reader should understandthat the data is passing, in fact, through the various hardware orphysical components or network links or connections and through thevarious software or program components described.

(4) While the present invention has been discussed above in the contextof HTTP protocol over a satellite link, the present invention is notlimited to that protocol; instead, some other protocol, at theapplication level or other level, could be employed. For instance,Hypertext Transfer Protocol Secure (HTTPS) is understood to be analternative and widely-used protocol to HTTP.

(5) While the present invention has been discussed above with respect toweb pages, again it is not so limited and other content could be used.

(6) While the present invention has been discussed above with respect toa satellite connection, it is not so limited, and any type of connectionbetween apparatuses could be employed.

(7) While the client PC and other apparatuses have been described aboveas being computers or the like, the present invention is not so limited,and instead such could be replaced by a variety of other devicesincluding, for example, a television, cellular telephone, personaldigital assistant (PDA), gaming system, or any other electronic devicefor connecting to a network such as the Internet or some other network.

(8) It should also be appreciated that instead of satellite and theInternet, any alternative network or network link can be incorporatedwith the present invention.

(9) While the present invention has been described as using networklinks such as LAN links, or WAN links such as a satellite link, ornetwork interface cards, or various types of switching or routing, itwill be appreciated that any forms or links, routing, switching, etc.may be used in place of the described networking components.

(10) In the description above, mention is made of the proxy server 250receiving a HTTP response sent by a web server. However, the presentinvention is not limited to the cases where the entire HTTP response isreceived by proxy server 250. Instead, proxy server 250 could receivedata from the HTTP response such as, for example, just a portion of theHTTP response. The proxy server 250 does not necessarily have to receivethe entire HTTP response. Also, the proxy server 250 could begin takingaction such as prefetching a dynamically-generated URL before receivingan entire HTTP response.

(11) In the description above, mention is made of the HTTP responseincluding a HTML document, or an HTML document including Javascript.However, the present invention is not so limited. An HTTP responsetypically includes an initial line, one or more header lines, and then amessage body. The message body may, for example, be HTML, or it may besome other data type (e.g., plain text, image (e.g., GIF), etc.). Thus,in the description above, where reference is made to the HTML document(i.e., a HTML message body) of the HTTP response, it should beunderstood that the invention is not limited to the same, but any otherHTTP response is also envisioned. Also, the proxy server 250 may send tothe client proxy program 141 either (1) the entire HTTP response or (2)data obtained in accordance with the HTTP response (e.g., just the HTTPresponse message body or some other subset of the HTTP response). Whatis preferred is that the proxy server 250 sends to the client proxyprogram 141 data from which the client proxy program 141 can generate aHTTP response to send to the client browser 120.

(12) In the description above, mention is made of the Javascriptcontained within the HTML document. However, the present invention isnot so limited. The Javascript may be contained in a separate discretedocument, accessed via a URL contained in the HTML document. In thiscircumstance, the client browser 120 and virtual browser 270 firstrequest the separate document (e.g., via HTTP by the URL of thedocument) and then execute the Javascript upon receipt of the document.Thus, the present invention is operative to modify and executeJavascript regardless of whether it is located in the HTML document orin a separate referenced document.

(13) In the description above, where various flowcharts and proceduresare described, if it is not otherwise specified, then it should beassumed that the flowcharts and procedures are effected by softwareprograms stored in memories of the type discussed above, which programs,when executed by a processor such as a CPU, carry out the describedsteps.

(14) In the description above, it is explained that when the clientbrowser 120 generates a first HTTP GET request for a first URL, theclient proxy program 141 can send data to the proxy server 250, fromwhich data the first URL can be obtained. When the proxy server 250receives this data, the proxy server 250 generates a second HTTP GETrequest for the first URL. This second HTTP GET request is, as describedabove, sent using TCP/IP with a source IP address being an IP address ofthe proxy server 250, and a destination address being an IP address ofthe web server, so that a HTTP response from the web server will be sentvia TCP/IP with the IP address of the proxy server 250 being the IPdestination address. However, the present invention is not limited tothe foregoing. Instead, the proxy server 250 could be a transparentproxy server. In such a case, instead of generating a second HTTP GETrequest, the proxy server could simply forward the first HTTP GETrequest (which was sent using a source IP address corresponding to theclient PC 110 and a destination IP address of the web server). In such acase, when the web server generates a HTTP response, the HTTP responseis sent using TCP/IP with the IP address of the client PC 110 being thedestination address. The proxy server 250 could detect the HTTP responseon the network, and even though the proxy server 250 did not generateits own HTTP GET request, the proxy server 250 could obtain the HTTPresponse or data therefrom, and then manipulate the Javascript asdiscussed above and/or pre-fetch content from dynamically-generatedand/or static URLs as discussed above.

(15) In the discussion above, it is explained that the first HTTP GETrequest for the first URL, generated by the client browser 120 of theclient PC 110, may be sent using IP where the source IP address is thatof the client PC. Of course, if the client PC's IP address is a privateIP address on a LAN, then router 130 may perform network addresstranslation before forwarding the IP packet to sub-system 200. In thatcase, the first HTTP GET request may be sent using TCP/IP where an IPsource address is changed from that of the client PC 110 to a public IPaddress of the router 130. Of course, in such a configuration, TCP/IPcommunications from the Internet intended for client PC 110 may have therouter 130's public IP address as the destination IP address, and therouter 130 then performs translation, usually based on port number, tochange the destination IP address to the client PC's IP address (i.e.,the private address). It will be appreciated that the present inventionis intended to also cover this case.

(16) While an embodiment using a satellite network has been describedabove, the invention is not limited to satellite networks. Otherrelatively long-latency networks could alternatively be used. Indeed,any network, whether long-latency or not, could be used.

(17) While an embodiment using the public Internet has been describedabove, the invention is not limited to using the Internet. Any othernetwork could be used including, for example, an enterprise privatenetwork or some other private network.

(18) While FIG. 2 depicts a single client PC 110, the invention is notlimited to one client PC. Of course, there could be multiple client PCs.

(19) While FIG. 2 depicts a personal computer (PC), the invention is notlimited to PCs. The invention also applies, for example, to otherdevices with browsers or that generate requests for web content, suchrequests including but not being limited to HTTP protocol requests.

(20) While it has been described above that the user may type a URL intothe address bar of the client browser 120, the invention is not solimited. Instead of typing a URL, the user could select a link by, forexample, clicking on it, or the client browser 120 itself could triggerthe movement to a new web page. Any of the myriad ways for requestingweb content are covered.

(21) While embodiments have been described in which the proxy serverinjects Javascript into an HTML document or HTTP response or the like,the invention is not so limited. Alternatively, another apparatus couldcarry out the injection. For example, the client proxy could be the oneto inject the Javascript.

(22) Another advantage offered by the present invention overconventional pre-fetch systems is that where the HTTP response from thewebserver contains Javascript that sets a cookie, the proxy server canexecute the Javascript and set the cookie (whereas a proxy server in aconventional pre-fetch system would not execute the Javascript and thuscould not set the cookie). As a result, when making an HTTP GET request(e.g., when retrieving a URL contained in the HTTP response), the proxyserver can use the cookie.

(23) While the present invention is applied to a satellitecommunications system, it not limited to such. For example, the presentinvention can be applied to a cellular communications system or awireless communications system or a wired network. It will be understoodthat the present invention can be applied to any networking orcommunications system which may benefit from the present invention.

(24) While the present invention describes a preferred embodimentcontaining hardware and/or software, it will be understood that any ofthose various components can be alternatively implemented in hardware,software, or a combination thereof.

(25) Unless specified otherwise, the term “memory” as discussed abovewith respect to the various apparatuses, refers to a physical computermemory, examples of which include RAM, ROM, and other examples ofcomputer hardware memory. In other words, the memory is a tangiblephysical object and is a non-ephemeral and non-transitory form ofmatter. Also all of the “apparatuses”, “devices”, and the like describedherein are also tangible physical objects that are non-ephemeral andthat include at least some hardware.

(26) While the preferred embodiments have been described above as usingHTTP, HTML, and the like, the present invention is not limited to theforegoing, and other protocols including, without limitation, othermarkup languages or methods of sending web content, could be used.

(27) While terms in the foregoing description such as editing ormodifying Javascript have been used to describe, by way of example andnot of limitation, how the present invention can cause the clientapparatus's web browser to receive an HTTP response that containsJavascript not present in an HTTP response generated by the web server,it should be understood that there might not be any Javascript in theoriginal, unmodified HTTP response generated by the web server; in sucha case, the present invention may be said to “inject” or insertJavascript so that the client apparatus's web browser receives an HTTPresponse that includes the injected Javascript, which was not present inthe original, unmodified HTTP response generated by the web server.Thus, it will be appreciated that where the application refers to ordepicts “modifying” Javascript in an embodiment, the invention is notlimited to “modifying” Javascript and also covers inserting or injectingJavascript or the like.

(28) Unless stated otherwise, “contains” shall have the meaning of“comprises”. Thus, for example, a packet that contains certain data isnot limited to that data but may also include other data.

(29) While embodiments have been described in which there are a clientproxy and a proxy server, the invention is not so limited. Instead ofhaving both a client proxy and a proxy server, that sub-system could bereplaced, for example, by a single proxy.

(30) While embodiments have been described in which the proxy serverinserts, injects, modifies, or edits Javascript, the invention is not solimited. Instead, the client proxy could carry out such steps. Suchcould be especially preferable if there is only one proxy. An example ofthe client proxy carrying out such steps could be that the client proxymay, instead of the proxy server, insert or inject Javascript into aHTTP response such that the client apparatus's web browser, whenexecuting the Javascript, sends browser-specific information to anotherapparatus (e.g., to the proxy server).

(31) While embodiments have been described in which the client proxyand/or proxy server monitor the cookie fields of HTTP GET requestsgenerated by the client apparatus's web browser, the invention is not solimited. Preferably, not only HTTP GET requests but also various HTTPrequests (e.g., GETs, PUTs, POSTs, etc.) are monitored.

INDUSTRIAL APPLICABILITY

The present invention provides a communications system that improves thetransfer of data over a communications link.

CONCLUSION

Except as otherwise disclosed herein, the various components shown inoutline or in block form in the figures are individually well known andtheir internal construction and operation are not critical either to themaking or using of this invention or to a description of the best modeof the invention.

Although specific embodiments of the present invention have beendescribed above in detail, it will be understood that this descriptionis merely for purposes of illustration. When it is said that something“is”, “shall”, “will”, or “should be” the case, for example, theseexpressions are not meant to limit the invention, but are merelyproviding a specific example or specific examples. Various modificationsof and equivalent structures corresponding to the disclosed aspects ofthe preferred embodiments in addition to those described above may bemade by those skilled in the art without departing from the spirit ofthe present invention which is defined in the following claims, thescope of which is to be accorded the broadest interpretation so as toencompass such modifications and equivalent structures.

What is claimed is:
 1. A proxy server apparatus comprising: a proxyserver module adapted to, in a case where a client device has generateda first HTTP GET request for a first URL, receive, from a web serverassociated with the first URL, a first HTTP response corresponding tothe first URL; means for obtaining Javascript in accordance withJavascript in the first HTTP response; and means for executing theobtained Javascript, wherein said proxy server module transmits data tothe client device such that the client device receives the obtainedJavascript and also executes the obtained Javascript, wherein in a casewhere the obtained Javascript when executed produces a request for aURL, (a) the executing means, by executing the obtained Javascript,effects an HTTP request for the URL, and (b) the client device, by alsoexecuting the obtained Javascript, also generates an HTTP request forthe URL, wherein a memory and processor are included in the proxy serverapparatus.
 2. An apparatus according to claim 1, wherein said proxyserver module transmits to a client proxy device, via a networkconnection, the obtained Javascript, and wherein the client proxy devicecomprises means for receiving the obtained Javascript and means forsending the obtained Javascript to the client device.
 3. An apparatusaccording to claim 1, further comprising means for pre-fetching webcontent from a URL determined in accordance with execution of theobtained Javascript.
 4. An apparatus according to claim 1, wherein saidproxy server module transmits to a client proxy device, via a networkconnection, the obtained Javascript, wherein the client proxy devicecomprises (a) means for generating a second HTTP response to the firstHTTP GET request in accordance with the obtained Javascript, and (b)means for sending the second HTTP response to the client device, andwherein the client device comprises means for receiving the second HTTPresponse, means for obtaining the obtained Javascript from the HTTPresponse, and means for executing the obtained Javascript.
 5. Anapparatus according to claim 1, wherein said proxy server moduletransmits to the client device, via a network connection, the obtainedJavascript, and wherein the client device comprises means for receivingthe obtained Javascript and means for executing the obtained Javascript.6. An apparatus according to claim 1, wherein said proxy server moduletransmits to the client device, via a network connection, the obtainedJavascript, and wherein the client device comprises (a) a HTTP webbrowser that generated the first HTTP GET request and (b) a proxysoftware program that receives the obtained Javascript from the proxyserver apparatus, generates a HTTP response to the first HTTP GETrequest in accordance with the obtained Javascript, and sends the HTTPresponse to the web browser, which executes the obtained Javascript. 7.An apparatus according to claim 1, wherein the executing means comprisesa web browser that executes the obtained Javascript.
 8. An apparatusaccording to claim 1, wherein said proxy server module is adapted to, inthe case where a client device has generated the first HTTP GET requestfor the first URL, generate a second HTTP GET request for the first URL,wherein the first HTTP response is a response to the second HTTP GETrequest.
 9. An apparatus according to claim 1, wherein the first HTTPresponse is a response to the first HTTP GET request.
 10. An apparatusaccording to claim 1, further comprising: means for, in response toexecution by the executing means of the obtained Javascript producing arequest for a second URL, generating a second HTTP GET request for thesecond URL; and means for receiving a second HTTP response to the secondHTTP GET request.
 11. An apparatus according to claim 10, furthercomprising means for sending data in accordance with the second HTTPresponse to a client proxy device, wherein the client proxy devicecomprises means for receiving the data in accordance with the secondHTTP response, means for generating a HTTP response in accordance withthe data in accordance with the second HTTP response, and means forsending the generated HTTP response to the client device.
 12. Anapparatus according to claim 10, further comprising means for sendingdata in accordance with the second HTTP response to the client device,wherein the client device comprises (a) a HTTP web browser and (b) meansfor receiving the data in accordance with the second HTTP response, forgenerating a HTTP response in accordance with the data in accordancewith the second HTTP response, and for sending the generated HTTPresponse to the web browser.
 13. An apparatus according to claim 10,further comprising: means for sending data in accordance with the secondHTTP response to the client device; and means for sending a notificationto the client device that the proxy server apparatus is generating thesecond HTTP GET request, wherein the notification is sent prior tosending the data in accordance with the second HTTP response to theclient device.
 14. An apparatus according to claim 13, furthercomprising means for sending to the client device, via a networkconnection, the obtained Javascript, wherein the client device comprises(a) means for receiving the notification from the proxy server apparatusand (b) means for awaiting receipt from the proxy server apparatus ofthe data in accordance with the second HTTP response without the clientdevice generating a request for the second URL.
 15. An apparatusaccording to claim 1, wherein the obtaining means comprises means formodifying Javascript in the first HTTP response to obtain Javascriptwhich is different from Javascript in the first HTTP response.
 16. Anapparatus according to claim 1, further comprising: means for, inresponse to HTML in the first HTTP response including a reference to aURL, generating a second HTTP GET request for that URL; and means for,in response to Javascript in the first HTTP response that when executedproduces a request for a URL, generating a third HTTP GET request forthat URL.
 17. An apparatus according to claim 16, further comprising:means for receiving a response to the second HTTP GET request and fortransmitting data in accordance with the response such that the clientdevice receives the transmitted data; and means for receiving a responseto the third HTTP GET request and for transmitting data in accordancewith the response such that the client device receives the transmitteddata.
 18. An apparatus according to claim 17, wherein the data inaccordance with the response to the second HTTP GET request and the datain accordance with the response to the third HTTP GET request aretransmitted to a client proxy device, and wherein the client proxydevice comprises (a) means for generating a HTTP response that includesthe data in accordance with the response to the second HTTP GET requestand for sending the generated HTTP response to the client device, and(b) means for generating a HTTP response that includes the data inaccordance with the response to the third HTTP GET request and forsending that HTTP response to the client device.
 19. An apparatusaccording to claim 1, wherein the client device comprises means forexecuting the obtained Javascript, and wherein, in the event thatexecution of the obtained Javascript produces a request for a secondURL, the proxy server apparatus generates a HTTP GET request for thesecond URL and the client device also generates a HTTP GET request forthe second URL, and the proxy server apparatus sends data via a networkconnection to cause the client device to receive a HTTP response to theclient device's HTTP GET request for the second URL.
 20. An apparatusaccording to claim 1, wherein the client device comprises (a) a webbrowser, which generates the first HTTP GET request and which has proxysettings, and (b) a program selected by the web browser's proxysettings, wherein the program receives the first HTTP GET request,obtains the first URL from the first HTTP GET request, and in accordancewith the first URL sends to the proxy server apparatus data thatincludes the first URL, wherein the proxy server apparatus furthercomprises means for sending, to the program, data comprising theobtained Javascript, wherein the program receives the data comprisingthe obtained Javascript and, in accordance with the data comprising theobtained Javascript, provides to the web browser a HTTP response to thefirst HTTP GET request, the HTTP response including the obtainedJavascript, wherein the web browser executes the obtained Javascript,wherein the proxy server apparatus further comprises (a) means for, inthe event that the execution by the executing means of the obtainedJavascript produces a request for a second URL, generating a second HTTPGET request for the second URL, (b) means for receiving a second HTTPresponse to the second HTTP GET request, and (c) means for sending, tothe program, data in accordance with the second HTTP response, andwherein after the program receives the transmitted data in accordancewith the second HTTP response and when the web browser, upon executingthe obtained Javascript, generates a HTTP GET request for the secondURL, the program generates in accordance with the data in accordancewith the second HTTP response and provides to the web browser a HTTPresponse to the web browser's HTTP GET request for the second URL, sothat it is unnecessary for the program to send the HTTP GET request forthe second URL to a web server corresponding to the second URL.
 21. Anapparatus according to claim 1, wherein the client device and a proxydevice are connected via a network, and the proxy device is connected tothe proxy server apparatus via a high-latency network, wherein theclient device comprises a web browser, which generates the first HTTPGET request, wherein the proxy device receives the first HTTP GETrequest from the client device, obtains the first URL from the firstHTTP GET request, and in accordance with the first URL sends to theproxy server apparatus data that includes the first URL, wherein theproxy server apparatus further comprises means for sending, to the proxydevice, data comprising the obtained Javascript, wherein the proxydevice receives the data comprising the obtained Javascript and inaccordance with the data, generates and sends to the web browser of theclient device a HTTP response to the first HTTP GET request, the HTTPresponse including the obtained Javascript, wherein the web browserexecutes the obtained Javascript, wherein the proxy server apparatusfurther comprises (a) means for, in the event that the execution by theexecuting means produces a request for a second URL, generating a secondHTTP GET request for the second URL, (b) means for receiving a secondHTTP response to the second HTTP GET request, and (c) means for sending,to the proxy device, data in accordance with the second HTTP response,and wherein when execution by the web browser of the obtained Javascriptresults in generation of a HTTP GET request for the second URL, theproxy device generates a HTTP response thereto in accordance with thedata in accordance with the second HTTP response, so that it isunnecessary for the proxy device to send the client device's HTTP GETrequest for the second URL to a web server corresponding to the secondURL.
 22. A device comprising: a processor; a memory storing a controlprogram to be executed by the processor; and a hardware networkinterface, wherein the control program comprises code that, whenexecuted by the processor, causes the device to at least perform thefollowing: (a) receiving, via the hardware network interface, datacorresponding to a first HTTP GET request for a first URL generated by aweb browser of a client device; (b) receiving data corresponding to afirst HTTP response, the first HTTP response having been generated by aweb server associated with the first URL; (c) if the data correspondingto the first HTTP response includes Javascript, obtaining Javascript forexecution by the control program, based on Javascript included in thedata corresponding to the first HTTP response; (d) executing theobtained Javascript; and (e) transmitting data to the client device suchthat the client device receives the obtained Javascript and alsoexecutes the obtained Javascript, wherein in a case where the obtainedJavascript when executed produces a request for a URL, (i) the executingstep, by executing the obtained Javascript, effects an HTTP request forthe URL, and (ii) the client device, by also executing the obtainedJavascript, also generates an HTTP request for the URL, wherein inresponse to the obtained Javascript dynamically generating a URL whenexecuted, the control program generates a second HTTP GET request forthe dynamically-generated URL.
 23. A device according to claim 22,wherein the client device further comprises a proxy program selected byproxy settings in the client device's web browser, wherein the proxyprogram sends to the control program the data corresponding to the firstHTTP GET request, wherein the control program is further configured totransmit data in accordance with the obtained Javascript to the proxyprogram, and wherein with the data in accordance with the obtainedJavascript, the proxy program generates and provides to the clientdevice's web browser a HTTP response to the first HTTP GET request. 24.An apparatus-implemented method comprising: receiving from a network, bya proxy server apparatus including a memory, a processor, and a hardwarenetwork interface, in a case where a web browser of a client devicegenerates a first HTTP GET request for a first URL, data correspondingto the first HTTP GET request; receiving by the proxy server apparatus,data corresponding to a HTTP response, the HTTP response having beengenerated by a web server associated with the first URL; obtainingJavascript in accordance with Javascript in the data corresponding tothe HTTP response; executing, by the proxy server apparatus, of theobtained Javascript; and transmitting data to the client device suchthat the client device receives the obtained Javascript and alsoexecutes the obtained Javascript, wherein in a case where the obtainedJavascript when executed produces a request for a URL, (a) the executingstep, by executing the obtained Javascript, effects an HTTP request forthe URL, and (b) the client device, by also executing the obtainedJavascript, also generates an HTTP request for the URL.
 25. A methodcomprising: determining, by a proxy server apparatus including a memory,that a client device has made a request for a first URL, wherein thefirst URL corresponds to a web server; and when a web page correspondingto the first URL comprises code that when executed generates a dynamic,non-static second URL: (1) prefetching, by the proxy server apparatus,of content in accordance with the second URL by generating a request forthe second URL, and (2) transmitting data to the client device such thatthe client device receives the code and also generates a request for thesecond URL.
 26. A method according to claim 25, further comprisinggenerating, by the proxy server apparatus, of a pre-fetch notificationthat is sent to a proxy for the client device, the pre-fetchnotification informing the proxy that content for the second URL is tobe prefetched by the proxy server apparatus.
 27. A method according toclaim 26, wherein the proxy is selected from the group consisting of aproxy program executed by the client device and a proxy device separatefrom the client device, and wherein in response to the proxy havingreceived the pre-fetch notification, the proxy prevents a HTTP requestfor the second URL generated by a web browser of the client device frombeing sent to a web server corresponding to the second URL.
 28. Anapparatus according to claim 10, further comprising: means for sendingdata in accordance with the second HTTP response to a client proxydevice; and means for sending a notification to the client proxy devicethat the proxy server apparatus is generating the second HTTP GETrequest, wherein the notification is sent prior to sending the data inaccordance with the second HTTP response to the client proxy device. 29.An apparatus according to claim 28, further comprising means for sendingto the client proxy device, via a network connection, the obtainedJavascript, wherein the client proxy device comprises (a) means forreceiving the notification from the proxy server apparatus and (b) meansfor awaiting receipt from the proxy server apparatus of the data inaccordance with the second HTTP response without the client proxy devicegenerating a request for the second URL.